.net oracle 输出参数,.NET中使用ORACLE函数和过程并输出参数(1)

这篇博客介绍了在.NET环境中使用ADO.NET调用Oracle存储过程和函数的方法,特别是处理输出参数的问题。作者提供了两种解决方案,一种是利用Oracle中的函数模拟SQL Server的存储过程,另一种是直接使用PROCEDURE的OUT参数。文章通过实例代码展示了如何在后台直接调用以及通过三层架构调用,并给出了DbHelperOra类的相关辅助方法。
摘要由CSDN通过智能技术生成

.net,ADO.NET,oracle,DBHELPERORA 我们知道.NET中调用ORACLE 的过程没有调用MS-SQLSERVER中的存储过程那么方便,尤其用到参数输出的时候,但是ORACLE的功能强大不会这个不能处理,这个你懂得,呵呵。 2个解决方案,一个是ORACLE中的函数可以带参数输出的,这

.net,ADO.NET,oracle,DBHELPERORA

我们知道.NET中调用ORACLE 的过程没有调用MS-SQLSERVER中的存储过程那么方便,尤其用到参数输出的时候,但是ORACLE的功能强大不会这个不能处理,这个你懂得,呵呵。

2个解决方案,一个是ORACLE中的函数可以带参数输出的,这个比较吻合SQLSERVER中的存储过程(个人比较意见用 ORACLE中的函数应对SQLSERVER中的存储过

程。

二就是用PROCEDURE 的OUT参数带出结果来解决这个问题。

下面来做个程序测试

erga0o5xuzf.png

fv4kap0u3kx.png

v00wnsymgll.pngqiantian" runat="server">

Button1" runat="server" OnClick="Button1_Click" Text="测试FUNCTION输出" />

button2" runat="server" OnClick="button2_Click" Text="测试PROCEDUCE输出" />

Button3" runat="server" Text="测试FUNCTION三层" OnClick="Button3_Click" />

Button4" runat="server" Text="测试PROCEDURE三层" OnClick="Button4_Click" />

后台代码 针对测试FUNCTION输出(直接写在代码里面)

protected void Button1_Click(object sender, EventArgs e)

{

OracleConnection conn = new OracleConnection("Data Source=yu;Persist Security Info=True;User ID=$$$$$$;Password=$$$$$$$$;Unicode=True;");

OracleCommand cmd = new OracleCommand();

cmd.Connection = conn;

cmd.CommandText = "F_ACC_CREATEPERMISSION";

cmd.CommandType = CommandType.StoredProcedure;

// add the parameters, including the return parameter to retrieve

cmd.Parameters.Add("CategoryID", OracleType.Number).Value = 555;

cmd.Parameters.Add("Description", OracleType.VarChar, 50).Value = "zzz1";

// the return value

cmd.Parameters.Add("Result", OracleType.Number).Direction = ParameterDirection.ReturnValue;

// execute the function

conn.Open();

cmd.ExecuteNonQuery();

conn.Close();

// output the result

Response.Write("Resultis:" + cmd.Parameters["Result"].Value);

}

后台代码 针对测试FUNCATION (通过参数 数据库类的 三层模式输出)

fv4kap0u3kx.png

v00wnsymgll.pngprotected void Button3_Click(object sender, EventArgs e)

{

// Accounts.Bus.Permissions myperm = new Accounts.Bus.Permissions();

Accounts.Data.Permission myperm = new Accounts.Data.Permission();

int i = myperm.Create(555, "zzz3");

Response.Write(i.ToString());

}

PERMISSION 类中代码

///

/// 创建一个权限

///

public int Create(int categoryID, string description)

{

int rowsAffected;

OracleParameter[] parameters =

{

new OracleParameter("CategoryID", OracleType.Number),

new OracleParameter("Description", OracleType.VarChar,50)

};

parameters[0].Value = categoryID;

parameters[1].Value = description;

return DbHelperOra.RunProcedure("F_ACC_CREATEPERMISSION", parameters, out rowsAffected);

}

DbHelperOra中的代码

///

/// 执行存储过程,返回影响的行数对应ORACLE 的FUNCTION 的RETURN用的

///

/// 存储过程名

/// 存储过程参数

/// 影响的行数

///

public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected)

{

using (OracleConnection connection = new OracleConnection(connectionString))

{

int result;

connection.Open();

OracleCommand command = BuildIntCommand(connection, storedProcName, parameters);

rowsAffected = command.ExecuteNonQuery();

result = int.Parse(command.Parameters["ReturnValue"].Value.ToString());

//Connection.Close();

return result;

}

}

BuildIntCommand调用的代码段

///

/// 创建OracleCommand 对象实例(用来返回一个整数值)

///

/// 存储过程名

/// 存储过程参数

/// OracleCommand 对象实例

private static OracleCommand BuildIntCommand(OracleConnection connection, string storedProcName, IDataParameter[] parameters)

{

OracleCommand command = BuildQueryCommand(connection, storedProcName, parameters);

//command.Parameters.Add(new OracleParameter("ReturnValue", OracleType.Int32, 4, ParameterDirection.ReturnValue,false, 0, 0, string.Empty, DataRowVersion.Default, null));

command.Parameters.Add("ReturnValue", OracleType.Number).Direction = ParameterDirection.ReturnValue;

return command;

}

BuildQueryCommand调用的代码段

///

/// 构建OracleCommand 对象(用来返回一个结果集,而不是一个整数值)

///

/// 数据库连接

/// 存储过程名

/// 存储过程参数

/// OracleCommand

private static OracleCommand BuildQueryCommand(OracleConnection connection, string storedProcName, IDataParameter[] parameters)

{

OracleCommand command = new OracleCommand(storedProcName, connection);

command.CommandType = CommandType.StoredProcedure;

foreach (OracleParameter parameter in parameters)

{

command.Parameters.Add(parameter);

}

return command;

}

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值