在ASP.net程序中常常需要调用数据库中存储过程或函数等,调用Oracle数据库存储过程的方法与调用sqlServer2000中的存储过程类似。只是.NET只支持oracle数据库包中的存储过程,不支持函数,不能像调用存储过程那样直接调用Oracle的函数。但如果有需要的话还是可以实现的。个人总结了一下,第一种方法是:在Oracle数据库后台,新建一个存储过程,在此存储过程中直接调用你想要调用的函数,函数的返回值传给存储过程中定义的一个变量就可以了。然后在你的.net程序中调用你定义的存储过程就可以了。但这种方法需要修改后台数据库,有时前台开发人员不具有修改数据库的权限,这种方法就显得被动一些了。第二种方法是通过在定义OracleCommand时,指定相应的command Text为: "select 函数名 from dual",当然相应的CommandType 为CommandType.Text,而不是CommandType.StoredProcedure,如果函数有参数,参数与一般的sql语句设置方法是一致的。
以下是一段实例:
OracleConnection conn = new OracleConnection(DBHelper.conn);
OracleCommand comm= new OracleCommand("select apps.SGMIS_WHP.GetOrder(:vDJDM,:vDWDM) from dual", conn);//此函建在包中,需要在函数前加包名
OracleParameter p0 = new OracleParameter("vDJDM", OracleType.VarChar, 20);
p0.Direction = ParameterDirection.Input;
p0.Value = vDJDM;
OracleParameter p1 = new OracleParameter("vDWDM", OracleType.VarChar, 20);
p1.Direction = ParameterDirection.Input;
p1.Value = vDWDM;
comm.Parameters.Add(p0);
comm.Parameters.Add(p1);
comm.CommandType = CommandType.Text;
string result;
try
{
if (conn.State == ConnectionState.Closed)
conn.Open();
result = Convert.ToString(comm.ExecuteScalar());
return result;
}
finally
{
if (conn.State == ConnectionState.Open)
conn.Close();
}
本文作者:佚名 来源:http://jackyrong.cnblogs.com/