C++ 对于SQLCHAR类型参数,ODBC SQLBindParameter的ColumnSize参数能否为strlen(param)+1?

C++ 对于SQLCHAR类型参数,ODBC SQLBindParameter的ColumnSize参数能否为strlen(param)+1?,c++,c,odbc,C++,C,Odbc,当C类型为SQL_C_CHAR时,SQLBindParameter函数at的示例将字符数组的大小作为ColumnSize参数第6个参数传递 引用该页的部分示例: SQLCHAR szEmployeeID[EMPLOYEE_ID_LEN]; SQL_DATE_STRUCT dsOrderDate; SQLINTEGER cbCustID = 0, cbOrderDate = 0, cbEmployeeID = SQL_NTS; 我想知道是否可以将字符串参数的长度加1作为ColumnSize参数

当C类型为SQL_C_CHAR时,SQLBindParameter函数at的示例将字符数组的大小作为ColumnSize参数第6个参数传递

引用该页的部分示例:

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

我想知道是否可以将字符串参数的长度加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);

这个问题的答案是肯定的。

我注意到,即使我将0作为第6个参数ColumnSize参数传递,我也会得到正确的结果。我尝试了一个SELECT*形式的查询,它来自于某个表,其中某个列=?在Sybase SQL Anywhere上。所以,这个参数似乎被忽略了。是的,这会起作用,我在用C编写自己的DB函数时使用了类似的方法。这节省了时间和麻烦。嗯,我以前从未尝试过将其传递给0,你说这有效吗?我总是给它一个计算值。Albert,我也传递一个计算值,因为我在网上没有看到任何使用0作为第六个参数的例子。但是,0作为第6个参数对我来说适用于Sybase SQL Anywhere。
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);