You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ ODBC调用SQL Server存储过程执行SQLFetch报错无法获取查询结果

问题原因分析
  • 核心原因:SQL Server 默认会返回 DML 语句的影响行数作为结果,你的存储过程先执行 INSERT 语句,执行成功后第一个返回的结果是 INSERT 的行数计数(非行集结果),你在 SQLExecute 执行完成后直接调用 SQLFetch,尝试读取非行集的计数结果,自然会返回 SQL_ERROR。
    两种解决方式:
    1. 调用 SQLFetch 之前先执行 SQLMoreResults(sqlStmtHandle),跳过 INSERT 的行数计数结果,定位到后续 SELECT 语句返回的行集结果,再调用 SQLFetch 即可正常读取数据。
    2. 在存储过程的 BEGIN 后第一行添加 SET NOCOUNT ON;,关闭 DML 语句的行数计数返回,存储过程执行后只会返回 SELECT 的行集结果,不需要跳转结果集就能直接调用 SQLFetch。
  • 潜在兼容问题:第二个参数的绑定类型和变量类型不匹配,你定义的 nAge 是有符号的 SQLINTEGER 类型,但绑定时传入的 C 类型是 SQL_C_ULONG(无符号长整型),虽然本次插入未触发异常,但传入负数时会出现数据错误,建议将第二个参数的 C 类型改为 SQL_C_LONG 保持匹配。
  • 排查建议:如果调整后仍报错,可以调用 SQLGetDiagRec 接口获取 ODBC 具体错误描述,可精准定位问题点。

内容的提问来源于stack exchange,提问作者black4joss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:18:03