2
當C類型爲SQL_C_CHAR
時,http://msdn.microsoft.com/en-us/library/ms710963(v=vs.85).aspx的SQLBindParameter函數示例將字符數組的大小作爲ColumnSize參數(第6個參數)傳遞。從該頁面的例子對於SQLCHAR類型參數,ODBC SQLBindParameter的ColumnSize參數是strlen(param)+ 1嗎?
引用部分:
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);
我想知道,如果它是好的,傳遞字符串參數的長度加上1作爲ColumnSize參數。換句話說,如果我們假設szEmployeeID
包含以空字符結尾的字符串,我想知道下面的調用是否可以。
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參數)傳遞,我也會得到正確的結果。我在Sybase SQL Anywhere上試過了SELECT * FROM some_table WHERE some_column =?形式的查詢。所以,這個論點似乎被忽略了。 – 2011-04-12 16:42:42
是的,這將起作用,我在C中使用自己的DB功能時使用了類似的方法。它節省了時間和麻煩。 – 2011-04-13 01:19:24
嗯,我從來沒有嘗試過把它傳遞給0,你說這有用嗎?我只是總是給它一個計算值。 – 2011-04-15 02:13:14