asp.net执行Oracle存储过程整理

第一次使用oracle,写完了存储过程,调用又成了问题.如何调,如何返?是本文的重点讨论问题.

先看代码:

 

public DataTable GetPageList(int PageSize, int PageIndex, ref int TotalCount, ref int TotalPage, string strWhere, string Fields, string OrderField, string OrderBy)
        {

            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;来获取返回值

posted on 2010-07-21 15:04  skeeter  阅读(2643)  评论(0编辑  收藏  举报

导航