SQLBindParam:设置 Null 值失败 (ODBC)
Posted
技术标签:
【中文标题】SQLBindParam:设置 Null 值失败 (ODBC)【英文标题】:SQLBindParam: setting Null value fails (ODBC) 【发布时间】:2016-06-08 07:31:53 【问题描述】:我正在尝试将 NULL 值绑定到 sql 查询中的参数,但执行语句时总是收到错误 HY009 Invalid argument value。这种奇怪的行为只有在我以发布模式构建时才会出现。在调试模式下它工作正常。有什么想法吗?
我的代码:
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
【问题讨论】:
【参考方案1】:如果我正确理解 https://msdn.microsoft.com/en-us/library/ms710963%28v=vs.85%29.aspx 的文档,则不允许您将 NULL 指针作为 ParameterValuePtr
参数传递 - 即使该值为 NULL 值。
来自文档中的 cmets 部分,关于错误 HY009:
(DM) 参数 ParameterValuePtr 是一个空指针,参数 StrLen_or_IndPtr 是一个空指针,参数 InputOutputType 不是 SQL_PARAM_OUTPUT。
如果您将代码更改为以下内容,它是否有效:
SQLRETURN nRet = SQLPrepare(m_hStmt, (SQLTCHAR *)strSQL, SQL_NTS);
SQLCHAR dummy[1];
dummy[0] = '\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);
【讨论】:
以上是关于SQLBindParam:设置 Null 值失败 (ODBC)的主要内容,如果未能解决你的问题,请参考以下文章
SQL语法错误:无法将 NULL值插入列'',该列不允许空值。INSERT失败。怎么解决啊
更新布尔值失败,因为在 null 上调用成员函数 update()