asp.net执行Oracle存储过程整理
第一次使用oracle,写完了存储过程,调用又成了问题.如何调,如何返?是本文的重点讨论问题.
先看代码:
{
OracleParameter[] parameters = {
new OracleParameter("TableName",OracleType.VarChar),
new OracleParameter("StrWhere",OracleType.VarChar),
new OracleParameter("Fields",OracleType.VarChar),
new OracleParameter("OrderField",OracleType.VarChar),
new OracleParameter("OrderBy",OracleType.VarChar),
new OracleParameter("PageSize",OracleType.Int32),
new OracleParameter("PageIndex",OracleType.Int32),
new OracleParameter("TotalPage",OracleType.Int32),
new OracleParameter("TotalCount",OracleType.Int32),
new OracleParameter("Value_Cur",OracleType.Cursor)};
parameters[0].Value = "BMXX";
parameters[1].Value = strWhere;
parameters[2].Value = Fields;
parameters[3].Value = OrderField;
parameters[4].Value = OrderBy;
parameters[5].Value = PageSize;
parameters[6].Value = PageIndex;
parameters[7].Value = TotalPage;
parameters[7].Direction = ParameterDirection.InputOutput;
parameters[8].Value = TotalCount;
parameters[8].Direction = ParameterDirection.InputOutput;
parameters[9].Direction = ParameterDirection.Output;
OracleDataReader odr = DbHelperOra.RunProcedure("OP_PAGE", parameters);
DataTable dt = new DataTable();
dt.Load(odr);
TotalPage = (int)parameters[7].Value;
TotalCount = (int)parameters[8].Value;
return dt;
}
参数很多,这个调用方法跟上一篇Oracle存储过程文章相结合,调的就是它.
说说在调的过程中发生的错误跟注意问题.
[1],ORA-06550: 第 1 行, 第 7 列:
PLS-00306: 调用 'OP_PAGE' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
这个错误的提示原因是我把最后一个参数给去掉了,即
new OracleParameter("Value_Cur",OracleType.Cursor)
parameters[9].Direction=ParameterDirection.Output;
就会报[1]这样的的错误,其实报这种错误还有多处,综合起来就是以下几点:
1,参数少于存储参数;
2,OracleType类型不符;
3,参数顺序有误;
4,Null值引起;
5,参数名称与存储名称不符.
[2],参数信息设置.
在执行完分页后,会返回除了数据集外的一些信息,如:TotalCount(总记录),TotalPage(总页数)等,这些返回值的获取跟初设参数有关.正如在代码中所看到的,如:parameters[8].value = TotalCount;
parameters[8].Direction = ParameterDirection.InputOutput;这说明该参数既是输入又是输出参.这样设置后,当在执行完存储过程后,可以通过反赋值的方式即:
TotalCount = (int)parameters[8].value;来获取返回值