【问题标题】:SQLBindParam: setting Null value fails (ODBC)SQLBindParam:设置 Null 值失败 (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    

【问题讨论】:

    标签: c++ ms-access odbc


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多