ODBC,SQL_SUCCESS_WITH_INFO,游标类型已更改 - 发生在具有单个 SELECT 的存储过程上
ODBC, SQL_SUCCESS_WITH_INFO, Cursor type changed - happening on a Stored Procedure with a single SELECT
我想知道是否有其他人遇到过这个问题以及他们如何解决它?
我们的应用程序进行以下 ODBC 调用:
CString strCmd = "sprTestSingleSelect";
rc = SQLExecDirect(hstmt, (UCHAR*)(LPCSTR)strCmd, SQL_NTS);
呼叫重新运行SQL_SUCCESS_WITH_INFO
。通过检查SQLGetDiagRec
我们会看到消息;光标类型已更改。
我们找到了来自Micrsoft的以下文章;
- http://support.microsoft.com/kb/156500/en-us
- http://msdn.microsoft.com/library/ms130807.aspx
存储过程 sprTestSingleSelect
是专门为测试两篇文章所暗示的内容而创建的 - 多个选择会导致更改。
CREATE PROCEDURE sprTestSingleSelect
AS
BEGIN
SET NOCOUNT ON;
SELECT id, firstname, lastname FROM address
END
GO
但是,即使使用这个非常简单的(单个 SELECT(存储过程,游标类型仍在更改(从 SQL_CURSOR_KEYSET_DRIVEN
更改为 SQL_CURSOR_FORWARD_ONLY
(。
我们需要游标类型以保持在 SQL_CURSOR_KEYSET_DRIVEN
,就像稍后在应用程序中我们调用 SQLFetchScroll(hstmt, SQL_FETCH_LAST, 0);
一样,由于游标类型不正确而下降。
有没有人知道我们可能做错了什么或出了什么问题?
我们正在使用 MS SQL Server 2008R2
我们的应用程序是用C++编写的(使用Visual Studio 10 Premium(
我们已经设法使上述测试正常工作,但是解决方案不是很令人满意。
当存储过程仅包含一个 SELECT
语句而不包含任何其他语句时,它不起作用。因此,要使其正常工作,我们所要做的就是删除语句SET NOCOUNT ON;
。作为旁注,我们测试了将 NOCOUNT 设置为 OFF 也不起作用 - 完全删除语句是必需的。
这似乎使得使用存储过程返回数据(结果集(变得相当无用!
如果有人有其他(更好的(解决方案,我们很乐意听到它......
- 在C++中调用 MS SQL 存储过程
- C++使用存储过程返回结果
- Visual样本存储过程从C 程序执行
- 多次调用存储过程时C++连接器"Commands out of sync" mySQL
- SQL Server 2016 CLR 存储过程错误:"A system assertion check has failed"
- 将大量数据从C 应用程序传递到SQLServer存储过程的最快方法是什么?
- 在我的代码中执行存储过程时出现问题
- 读取 Firebird 存储过程的返回值
- 在C++中通过SOCI/ODBC实现SQL Server存储过程
- 如何使用 Oracle 存储过程中C++函数
- 使用 QSqlQuery 检索 MySQL 存储过程的输出
- C++/CLI 存储过程找不到资源
- ADO 不支持存储过程中的 XML
- 我是否可以使用单个 SetSubclassWindow 过程来子类化多个编辑控件,如果可以,如何做到这一点
- MSSQL服务器存储过程在从c++调用时不返回输出参数
- ODBC,SQL_SUCCESS_WITH_INFO,游标类型已更改 - 发生在具有单个 SELECT 的存储过程上
- SQL Server-使用C++ODBC调用存储过程
- 通过OCI调用Oracle存储过程,并在C++中使用out-ref游标返回结果
- 如何用ADO和c++传递null给存储过程输入参数
- 为什么我的c++扩展存储过程不写入控制台