- 论坛徽章:
- 5
|
30可用积分
下面是用odbc调用的存储过程与调用的代码。执行后能够返回记录集,但是不能返回输出参数@intResult的值。
如果将其中的 exec(@sql)注释掉,那么就能返回输出参数@intResult的值,但不能返回记录集。
请问如何处理既能返回记录集又能返回@intResult的值?- if exists(select 1 from sysobjects where name='pageUserlist_p' and xtype='p')
- drop procedure dbo.pageUserlist_p
- go
- create procedure dbo.pageUserlist_p
- @intResult Int OUTPUT
- as
- set nocount on
- declare @PageCount1 int
- declare @sql nvarchar(4000)
- begin tran
- set @sql='select userid,userCode,userName,loadName,userPwd from user_t'
- exec(@sql)
- set @intResult=12
- If @@Error <> 0
- Begin
- RollBack Tran
- SET @intResult=-1
- End
- Else
- Begin
- Commit Tran
- End
- GO
复制代码 调用存储过程的代码:- sprintf(select_str,"{call pageUserlist_p(?)}");
- connectDB(); //调用连接数据库函数
- retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_OUTPUT, SQL_C_LONG,SQL_INTEGER, 0, 0, &recordTotal, 0, &cb1); //返回值
- retcode = SQLExecDirect(hstmt,(SQLCHAR *)select_str,SQL_NTS);
- if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
- {
- retcode=SQLBindCol(hstmt,1,SQL_C_ULONG,&userid,11,&cb);
- retcode=SQLBindCol(hstmt,2,SQL_C_CHAR,userCode,11,&cb);
- retcode=SQLBindCol(hstmt,3,SQL_C_CHAR,userName,20,&cb);
- retcode=SQLBindCol(hstmt,4,SQL_C_CHAR,loadName,20,&cb);
- retcode=SQLBindCol(hstmt,5,SQL_C_CHAR,userPwd,20,&cb);
- while (TRUE)
- {
- retcode = SQLFetch(hstmt);
- if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
- {
- //代码
- }
- }
- }
复制代码 |
最佳答案
查看完整内容
回复 10# 光速 不要这么用,或者说SQLMoreResults(...) 不是这么用的. 尝试如下看看: ........... retcode = SQLExecDirect(hstmt,(SQLCHAR *)select_str,SQL_NTS); 获取第一个结果集. SQLMoreResults(stmt); 获取第二个结果集 ...
|