读书人

C# 推行oracle的存储过程 参数个数或是

发布时间: 2013-05-02 09:39:29 作者: rapoo

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.OracleClient命名空间下,Oracle里面不存在DbType.Int32类型。

读书人网 >C#

热点推荐