SQLBindParam:设置Null值失败(ODBC)

时间:2016-06-08 07:31:53

标签: c++ ms-access odbc

我正在尝试将NULL-Value绑定到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    

1 个答案:

答案 0 :(得分:0)

如果我正确理解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] = '\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);
相关问题