SQLBindParam:设置 Null 值失败 (ODBC)
SQLBindParam: setting Null value fails (ODBC)
我正在尝试将 NULL 值绑定到 sql 查询中的参数,但执行语句时总是收到错误 HY009 参数值无效。这种奇怪的行为仅在我以发布模式构建时才会出现。在调试模式下,它工作正常。有什么想法吗?
我的代码:
SQLRETURN nRet = SQLPrepare(m_hStmt, (SQLTCHAR *)strSQL, SQL_NTS); // returns SQL_SUCCESS
SQLINTEGER cbNumeric = SQL_NULL_DATA;
nRet = SQLBindParameter(m_hStmt,
parameterIndex,
SQL_PARAM_INPUT,
SQL_C_CHAR,
SQL_LONGVARCHAR,
0,
NULL,
NULL,
0,
&cbNumeric); // returns SQL_SUCCESS
nRet = SQLExecute(m_hStmt); // returns SQL_NEED_DATA
nRet = _SQLParamDataPutData(nRet); // returns Debug: SQL_SUCCESS, Release: SQL_ERROR
如果我
正确理解了 https://msdn.microsoft.com/en-us/library/ms710963%28v=vs.85%29.aspx 的文档,则不允许将 NULL 指针作为参数传递ParameterValuePtr
即使该值是 NULL 值。
从文档的评论部分,关于错误HY009:
(DM) 参数 ParameterValuePtr 是一个空指针,参数 StrLen_or_IndPtr是一个空指针,参数 InputOutputType 没有SQL_PARAM_OUTPUT。
如果您将代码更改为以下内容,它是否有效:
SQLRETURN nRet = SQLPrepare(m_hStmt, (SQLTCHAR *)strSQL, SQL_NTS);
SQLCHAR dummy[1];
dummy[0] = ' ';
SQLINTEGER cbNumeric = SQL_NULL_DATA;
nRet = SQLBindParameter(m_hStmt,
parameterIndex,
SQL_PARAM_INPUT,
SQL_C_CHAR,
SQL_LONGVARCHAR,
0,
NULL,
dummy,
SQL_NTS,
&cbNumeric); // returns SQL_SUCCESS
nRet = SQLExecute(m_hStmt); // returns SQL_NEED_DATA
nRet = _SQLParamDataPutData(nRet);
相关文章:
- 如果没有malloc,链表实现将失败
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- 视图中的参数推导失败:take_while
- 链接到自行创建的dll失败
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- gcc和c++17的过载解析失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 从父数组测试用例构造二叉树失败
- LibGit2 SSH身份验证失败
- 如何让LLDB在成功时退出,在失败时等待
- ODBC导出到Excel在Windows7、Windows8.x和Windows10下失败
- Oracle ODBC 插入失败,没有任何错误诊断
- SQLBindParam:设置 Null 值失败 (ODBC)
- 记录集更新和删除失败(ODBC)