对于SQLCHAR类型参数,ODBC SQLBindParameter的ColumnSize参数可以是strlen(param)+ 1吗?

时间:2011-04-12 14:19:05

标签: c++ c odbc

当{C}为SQL_C_CHAR时,http://msdn.microsoft.com/en-us/library/ms710963(v=vs.85).aspx处的SQLBindParameter函数的示例将字符数组的大小作为ColumnSize参数(第6个参数)传递。

从该页面引用部分示例:

SQLCHAR szEmployeeID[EMPLOYEE_ID_LEN];
SQL_DATE_STRUCT dsOrderDate;
SQLINTEGER cbCustID = 0, cbOrderDate = 0, cbEmployeeID = SQL_NTS;

...

retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT,
                           SQL_C_CHAR, SQL_CHAR, EMPLOYEE_ID_LEN,
                           0, szEmployeeID, 0, &cbEmployeeID);

我想知道是否可以将string参数的长度加1作为ColumnSize参数。换句话说,如果我们假设szEmployeeID包含以null结尾的字符串,我想知道以下调用是否正常。

retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT,
                           SQL_C_CHAR, SQL_CHAR, strlen(szEmployeeID) + 1,
                           0, szEmployeeID, 0, &cbEmployeeID);

我相信这对于这样的调用非常有用:

SQLLEN nts = SQL_NTS;
retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT,
                           SQL_C_CHAR, SQL_CHAR, 6,
                           0, "hello", 0, &nts);

char *domain = "stackoverflow.com";
retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT,
                           SQL_C_CHAR, SQL_CHAR, strlen(domain) + 1,
                           0, domain, 0, &nts);

1 个答案:

答案 0 :(得分:1)

这个问题的答案是“是”。