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