日期:2014-05-17  浏览次数:20993 次

C# 实行oracle的存储过程 参数个数或是类型不正确
运行提示  参数个数或是类型不正确
oracle的存储过程如下 数据库中调试是正确的。

CREATE OR REPLACE PROCEDURE DivPageBySql
(
    pstrSql       in      varchar2,
    pnPageSize    in      NUMERIC,
    pnPageIndex   in      NUMERIC,
    pnRowCount    out     NUMERIC
)
IS

    v_pfrist number;
    v_sql varchar2(4000);
    v_notecount number;
    v_min number;
    v_max number;
    v_sql1 varchar2(100);
    v_sql2 varchar2(100);
    v_sql3 varchar2(4000);

BEGIN

    --查询总记录的SQL
    v_sql:='select count(*) from (' || pstrSql || ')';
    --执行SQL把总记录结果得到
    execute immediate v_sql into v_notecount;
    --求出总页数
    pnRowCount := ceil(v_notecount/pnPageSize);

    -- 如果传进来的页数大于最后一页,默认返回最后一页数据
    v_pfrist := pnPageIndex;
    IF(v_pfrist > pnRowCount)THEN
    v_pfrist := pnRowCount;
    end IF;

    --显示页的最大记录排行值
    v_max := v_pfrist * pnPageSize;
    --显示页的最小记录排行值
    v_min := v_max - pnPageSize +1;

    --分页SQL
    v_sql1 := 'select * from (select rownum rn,t.* from ';
    v_sql2 := ' t ) where rn between '||v_min||' and '||v_max;
    v_sql3 := v_sql1||' ( '||pstrSql||' ) '||v_sql2;
    execute immediate v_sql3;

EXCEPTION
  WHEN OTHERS THEN
    ROLLBACK;

END DivPageBySql;


调用的时候 如下
 
Database.AddInParameter(command, "pstrSql", DbType.String, strSqlCmd);
Database.AddInParameter(command, "pnPageSize", DbType.Int32, pageSize);
Database.AddInParameter(command, "pnPageIndex", DbType.Int32, pageIndex);
Database.AddOutParameter(command, "pnRowCount", DbType.Int32, sizeof(int));
DataSet ds;
ds = Database.ExecuteDataSet(command);



希望各位大侠 指点,晕了 看不出来是哪一个参数不正确。
Oracle C#

------解决方案--------------------
using System.Data.OracleClient
oracle中的NUMERIC对应OracleType.Number
------解决方案--------------------
哪一行报错 执行的时候? 
你现在确认2个事情 
1.da里面执行存储过程的方法是不是对的 ExecuteNoQuay 什么的
2.跟踪参数,看值 是不是 超限 或者值不正确 传的类型正确不代表参数值在使用的时候正确 比如长度比数据表的类型超了!
------解决方案--------------------
使用DbType.Decimal代替DbType.Int32,对于System.Data.OracleCli