参考:https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlbindcol-function?view=sql-server-ver15
odbc中SQLFetch读到NULL则不会改变那一列对应的缓冲区,而是将对应列的
长度/标志
也就是StrLen_or_Ind
变量设置为SQL_NULL_DATA
。
例如:
;
SQLLEN enameLen[45];
SQLVARCHAR ename//绑定数据
(serverhstmt,1, SQL_C_CHAR, (void*)ename,sizeof(ename), &enameLen);
SQLBindCol(serverhstmt); SQLFetch
其中SQLBindCol
的最后一个参数就是StrLen_or_Ind
,也就是长度/标志
。
如果读到的是正常值,则enameLen会被赋值为读到的字符的个数。
如果读到NULL,那么ename里的内容不会被改变,但是enameLen会被设置为SQL_NULL_DATA
。所以可以这样检测读到的是否是NULL:
if (SQL_NULL_DATA == enameLen)