gpt4 book ai didi

c++ - ODBC、SQL_SUCCESS_WITH_INFO、游标类型已更改 - 发生在具有单个 SELECT 的存储过程上

转载 作者:太空宇宙 更新时间:2023-11-04 11:52:10 25 4
gpt4 key购买 nike

我想知道是否有其他人遇到过这个问题,他们是如何解决的?

我们的应用程序进行以下 ODBC 调用:

CString strCmd = "sprTestSingleSelect";
rc = SQLExecDirect(hstmt, (UCHAR*)(LPCSTR)strCmd, SQL_NTS);

调用返回 SQL_SUCCESS_WITH_INFO。通过检查 SQLGetDiagRec 我们可以看到消息;光标类型已更改。

我们从微软找到了以下文章;

  1. http://support.microsoft.com/kb/156500/en-us
  2. 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_DRIVENSQL_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++ - ODBC、SQL_SUCCESS_WITH_INFO、游标类型已更改 - 发生在具有单个 SELECT 的存储过程上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17699112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com