[Microsoft][ODBC SQL Server Driver]没有提供需要的指示器变量
SQLState 22002: Indicator variable required but not supplied
http://support.microsoft.com/kb/158618/en-us/
对于数据库中的TEXT数据, 如果在读的时候绑定的指示器变量(用来返回长度的变量)为NULL,
而数据内容也是null时, SQL试图通过指示器变量返回SQL_NULL_DATA 标志而失败.
对于数值类型的output参数,如果在存储过程返回时候是NULL(一般很少吧),也会提示这个错误.
SQLRETURN SQLBindParameter( SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber, SQLSMALLINT InputOutputType, SQLSMALLINT ValueType, SQLSMALLINT ParameterType, SQLUINTEGER ColumnSize, SQLSMALLINT DecimalDigits, SQLPOINTER ParameterValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StrLen_or_IndPtr); // 这个就是"指示器变量"
SQLRETURN SQLBindCol( SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLPOINTER TargetValuePtr, SQLINTEGER BufferLength, SQLLEN * StrLen_or_Ind); // 这个就是"指示器变量"
解决方案:
(1)不要把StrLen_or_Ind指定为NULL
(2)给所有字段指定默认值
(3)如果是存储过程, 在存储过程中对null数据进行判断
@varName = ISNULL(COL_NAME, '') -- 把null用空串代替
另外:
如果调用存储过程的语句指定的参数数量, 和存储过程实际需要的参数数量不一致, 也会提示这个错误.