odbccommand调用带输出的存储过程是什么格式?----高人帮帮。

liumj2001 2011-08-30 11:48:04
OdbcDataReader dr; //存放变量的数据
Database db = new Database();
db.ODBCOpen(connstr);
OdbcParameter[] prams = {
db.oMakeInParam("@StrSql",OdbcType.VarChar,5000,sqlstr),
db.oMakeInParam("@PageIndex",OdbcType.Int,16,ipage ),
db.oMakeInParam("@PageCount",OdbcType.Int,16,20),
db.oMakeInParam("@SortClause",OdbcType.NText,5000,"MA001"),
db.oMakeInParam("@Filter",OdbcType.NText,5000,"MA001"),
db.oMakeOutParam("@TotalNum",OdbcType.Int,16)
};
db.RunProc("exec Common_Sp_Pagination @StrSql=?,@PageIndex=?,@PageCount=?,@SortClause=?,@Filter=?,OUTPUT", prams, out dr);


上面这句跑不通啊。

怎么调用?
...全文
213 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gemini Dean 2011-09-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qingyun1029 的回复:]
参考一下:

C#调用Oracle存储过程
[/Quote]
学习一下这个调用方法,测试过可行,你不凡试试。希望早点成功!
liumj2001 2011-09-14
  • 打赏
  • 举报
回复
存储过程中也删除@TotalNum INT OUTPUT

我就没有办法得到总记录数了。
Gemini Dean 2011-09-14
  • 打赏
  • 举报
回复
存储过程中也删除@TotalNum INT OUTPUT --总记录条数
就不会出错吧,我估计是赋值有问题了

ParameterDirection.Input;
ParameterDirection.Output;
liumj2001 2011-09-14
  • 打赏
  • 举报
回复
这个存储过程返回一个记录集,同时还返回总的行数。
1 通用分页存储过程说明
1.1 存储过程名称:Common_Sp_Pagination
1.2 存储过程代码:

ALTER PROC [dbo].[Common_Sp_Pagination]
@StrSql VARCHAR(MAX) ,
@PageIndex INT ,--当前页码
@PageCount INT ,--每页条数
@SortClause VARCHAR(100) ,--排序字段,不加“Order by”
@Filter VARCHAR(200) , --条件,可以为空,不加where
@TotalNum INT OUTPUT --总记录条数
AS
DECLARE @ExeSql VARCHAR(MAX)
DECLARE @OrderByStr VARCHAR(100)
DECLARE @StartRowIndex INT
DECLARE @EndRowIndex INT
SET @StartRowIndex = ( @PageIndex - 1 ) * @PageCount + 1
SET @EndRowIndex = @PageIndex * @PageCount



/*--条件筛选--*/
IF @Filter IS NOT NULL
AND @Filter <> ''
BEGIN
SET @StrSql = @StrSql + ' WHERE ' + @Filter
END

/*--排序--*/
IF @SortClause IS NOT NULL
AND @SortClause <> ''
BEGIN
SET @OrderByStr = ' order by ' + @SortClause
SET @ExeSql = ' SELECT * FROM (' + @StrSql
+ ') AS A where rowIndex between ' + CAST(@StartRowIndex AS VARCHAR)
+ ' And ' + CAST(@EndRowIndex AS VARCHAR) + ' ' + @OrderByStr

END
ELSE
BEGIN
SET @ExeSql = ' SELECT * FROM (' + @StrSql
+ ') AS A where rowIndex between ' + CAST(@StartRowIndex AS VARCHAR)
+ ' And ' + CAST(@EndRowIndex AS VARCHAR) + ' '
END

PRINT @StrSql
PRINT @ExeSql
/*---查询总数-*/
CREATE TABLE #temp ( TotalNum INT )
DECLARE @InsertTemp VARCHAR(max)
SET @InsertTemp = 'insert into #temp select count(*) from (' + @StrSql
+ ') as A'
--PRINT @InsertTemp
EXEC(@InsertTemp)
SELECT @TotalNum = TotalNum
FROM #temp
DROP TABLE #temp

/*--查询分页信息--*/
EXEC(@ExeSql)
liumj2001 2011-09-14
  • 打赏
  • 举报
回复
public void RunProc(string procName, OdbcParameter[] prams, out OdbcDataReader dataReader)
{
OdbcCommand cmd = oCreateCommand(procName, prams);
dataReader = cmd.ExecuteReader();
//return (int)cmd.Parameters[5].Value;
}
jimh 2011-09-05
  • 打赏
  • 举报
回复
db.RunProc 里面是做什么的,把这个函数贴出来看看?
liumj2001 2011-09-05
  • 打赏
  • 举报
回复
我顶。
liumj2001 2011-08-30
  • 打赏
  • 举报
回复
删除输出变量后提示这个。

ERROR [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]过程或函数 'Common_Sp_Pagination' 需要参数 '@TotalNum',但未提供该参数。
liumj2001 2011-08-30
  • 打赏
  • 举报
回复
db.RunProc(Common_Sp_Pagination);

这样也不行。

ERROR [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]必须传递参数 6,并以 '@name = value' 的形式传递后续的参数。一旦使用了 '@name = value' 形式之后,所有后续的参数就必须以 '@name = value' 的形式传递
萧炎 2011-08-30
  • 打赏
  • 举报
回复
和sql一样的 LZ不妨看看sql的
qingYun1029 2011-08-30
  • 打赏
  • 举报
回复
什么错误?

贴出来看看。
qingYun1029 2011-08-30
  • 打赏
  • 举报
回复

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧