运行提示 参数个数或是类型不正确
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);
希望各位大侠 指点,晕了 看不出来是哪一个参数不正确。OracleC#
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);
希望各位大侠 指点,晕了 看不出来是哪一个参数不正确。OracleC#
解决方案 »
- OracleApater.Fill为什么卡住了?
- 怎样控制多台打印机同时打印同一文档
- 请问在何处处理弹出对话框的按扭事件??
- 关于C#中WINFORM界面设计,构造函数继承的问题?请高手帮帮忙!
- 如何在应用程序中打开“数据链接属性”窗口,并获得其设置的数据库链接字符串?
- 怎样将16进制字符串转化为int32型
- 哪位大婶或者大牛可以帮我详细的帮我解释一下吗 就讲解前面BUTTON2就可以了 是不是每用到一个控件就要在控件后面加以个方法之类的? 谢谢
- datagrid控件中有buttoncolumn这样一个列,点击这一列弹出选择对话框,点确定执行一种操作,点取消执行另外一种操作,如何做呢?
- 如何测试当前鼠标所在的位置属于哪一个Region内?谢谢!
- 请问怎么关闭WindowsApplication1.exe?(50分相送)
- uploadify 传值问题……弄了几天还是不行
- 批量添加uniqueidentifier类型的数据
oracle中的NUMERIC对应OracleType.Number
第三个参数是DbType类型的,改成OracleType.Number 参数类型不对啊。
parameters[32].Direction = ParameterDirection.Output;
new OracleParameter ("pstrSql" , OracleType.VarChar),
new OracleParameter ("pnPageSize", OracleType.Number),
new OracleParameter ("pnPageIndex", OracleType.Number),
new OracleParameter ("pnRowCount", OracleType.Number),
};
parames[0].Value = strSqlCmd;
parames[1].Value = pageSize;
parames[2].Value = pageIndex;
parames[0].Direction = ParameterDirection.Input;
parames[1].Direction = ParameterDirection.Input;
parames[2].Direction = ParameterDirection.Input;
parames[3].Direction = ParameterDirection.Output; foreach (OracleParameter parameter in parames)
{
command.Parameters.Add(parameter);
}
DataSet ds;
if (!Database.NeedTransaction)
ds = Database.ExecuteDataSet(command);
else
ds = Database.ExecuteDataSet(command, TransactionUtil.DataTransaction);
改成这样 还是不对~
你现在确认2个事情
1.da里面执行存储过程的方法是不是对的 ExecuteNoQuay 什么的
2.跟踪参数,看值 是不是 超限 或者值不正确 传的类型正确不代表参数值在使用的时候正确 比如长度比数据表的类型超了!
把参数放在PLSQLdeveloper里测试,是可以执行的,commond里边的参数用监视器看了 也是正确的。但是就是报参数类型或是个数不正确。
你直接用OracleCommand.ExecuteNonQuery();
OracleCommand.ExecuteScalar();
参考:
http://lovenj2008.blog.163.com/blog/static/2070740020088732812524/
细节问题
我把存储过程改了一下 就可以了
加了一个输出型游标参数
CREATE OR REPLACE PROCEDURE DivPageBySql
(
pstrSql in varchar2,
pnPageSize in NUMERIC,
pnPageIndex in NUMERIC,
pnRowCount out NUMERIC,
pageResultSet out SYS_REFCURSOR
)
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;
open pageResultSet for v_sql3; END DivPageBySql;