SQLBindParam:设置 Null 值失败 (ODBC)

SQLBindParam: setting Null value fails (ODBC)

本文关键字:ODBC 失败 设置 Null SQLBindParam      更新时间:2023-10-16

我正在尝试将 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);