2011-04-12 10 views
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

我注意到,即使我將0作爲第6個參數(ColumnSize參數)傳遞,我也會得到正確的結果。我在Sybase SQL Anywhere上試過了SELECT * FROM some_table WHERE some_column =?形式的查詢。所以,這個論點似乎被忽略了。 – 2011-04-12 16:42:42

+0

是的,這將起作用,我在C中使用自己的DB功能時使用了類似的方法。它節省了時間和麻煩。 – 2011-04-13 01:19:24

+0

嗯,我從來沒有嘗試過把它傳遞給0,你說這有用嗎?我只是總是給它一個計算值。 – 2011-04-15 02:13:14

回答

1

的這個問題的答案是「是」。