標籤: 暫無標籤

  SQLBindCol


  函數功能描述:將數據緩衝綁定到結果集的列


  說明:


  版本引入:ODBC 1.0


  遵從標準:ISO 92


  功能說明: SQLBindCol將應用程序的數據緩衝綁定到結果集的各列


  函數原型: SQLRETURN SQLBindCol(


  SQLHSTMT StatementHandle,


  SQLUSMALLINT ColumnNumber,


  SQLSMALLINT TargetType,


  SQLPOINTER TargetValuePtr,


  SQLINTEGER BufferLength,


  SQLLEN * StrLen_or_Ind);


  參數:


  StatementHandle


  [輸入] 聲明的句柄


  ColumnNumber


  [輸入] 結果集里要綁定的列號。列號為從0開始遞增的數字編號,第0列為書籤列。如果沒有使用書籤――就是說,SQL_ATTR_USE_BOOKMARKS這個聲明屬性被置為SQL_UB_OFF――那麼列號從1開始計數;


  TargetType


  [輸入] *TargetValuePtr所指緩衝的C數據類型的標識符,當通過SQLFetch, SQLFetchScroll, SQLBulkOperations或 SQLSetPos從數據源取得數據的時候,驅動程序將數據轉換成這個類型;當通過SQLBulkOperations或SQLSetPos發送數據到數據源時,驅動程序從這個類型來轉換數據。


  TargetValuePtr


  [輸入/輸出] 用來綁定列的數據緩衝的指針。SQLFetch 和SQLFetchScroll返回數據到這個緩衝。當操作為SQL_FETCH_BY_BOOKMARK標識的時候SQLBulkOperations返回數據到這個緩衝。當操作為SQL_ADD 或 SQL_UPDATE_BY_BOOKMARK時,從這個緩衝取得數據。當操作為SQL_REFRESH時,SQLSetPos返回數據到這個緩衝中;當操作為SQL_UPDATE時,從這個緩衝取得數據。如果TargetValuePtr為一空指針,驅動程序取消列到數據緩衝的綁定。應用程序可通過SQL_UNBIND選項通過調用SQLFreeStmt來取消所有列的綁定。如果SQLBindCol調用的TargetValuePtr參數為空指針而StrLen_or_IndPtr是有效的值的話,應用程序可取消列的綁定但仍然存在一個該列的長度/指示緩衝綁定。


  BufferLength


  [輸入] *TargetValuePtr指向的緩衝的位元組數長度。驅動程序使用BufferLength來避免返回可變長數據如字元或二進位數時寫過*TargetValuePtr的邊界。注意驅動程序會在返回字元數據到*TargetValuePtr時計算空終止符。因此*TargetValuePtr緩衝就要包括空終止符的空間,否則驅動程序會截短數據。當驅動程序返回定長數據如整形數或一個數據結構時,驅動程序會忽略BufferLength參數並判斷緩衝是否足夠大來接收數據。因此很重要的是應用程序要分配一個足夠大的緩衝給定長數據,否則驅動程序會寫過緩衝的界。當BufferLength 小於0時SQLBindCol返回SQLSTATE HY090(無效的字元串或緩衝長度),等於0時不返回這個結果,可是,如果TargetType指定為一個字元類型,應用程序就不要將BufferLength設為0,因為ISO的CLI-適應的 驅動程序在這種情況下返回SQLSTATE HY090。


  StrLen_or_IndPtr


  [輸入/輸出] 指向綁定列的長度/指示緩衝。SQLFetch 和 SQLFetchScroll返回一個數值到這個緩衝。當操作為SQL_ADD,SQL_UPDATE_BY_BOOKMARK, 或 SQL_DELETE_BY_BOOKMARK時SQLBulkOperations從這個緩衝取得一個數值。當操作為SQL_FETCH_BY_BOOKMARK時SQLBulkOperations返回一個數值到這個緩衝,當操作為SQL_REFRESH時SQLSetPos返回一個數值到此緩衝;但操作為SQL_UPDATE時,它從這個緩衝取回一個數值。SQLFetch, SQLFetchScroll, SQLBulkOperations, 和 SQLSetPos可返回以下數值到長度/指示緩衝:


  l 返回數據的有效長度


  l SQL_NO_TOTAL


  l SQL_NULL_DATA


  應用程序可下列值放入長度/指示緩衝給供SQLBulkOperations 或SQLSetPos使用:


  l 待發送數據的長度


  l SQL_NTS


  l SQL_NULL_DATA


  l SQL_DATA_AT_EXEC


  l SQL_LEN_DATA_AT_EXEC宏的結果


  l SQL_COLUMN_IGNORE


  如果指示緩衝和長度緩衝是分開的緩衝區的話,指示緩衝只能返回SQL_NULL_DATA,而長度緩衝可返回所有其他的值。如果StrLen_or_IndPtr為一個空指針,那麼沒有可用的長度或指示值。這是當取數據且數據為NULL時的一個錯誤。


  返回值:


  SQL_SUCCESS,SQL_SUCCESS_WITH_INFO,SQL_ERROR,或SQL_INVALID_HANDLE.


  備註:此SDK函數的使用涉及到很多相關的部分,請使用者一定要認真仔細。


  示例代碼:


  #define NAME_LEN 50


  #define PHONE_LEN 10


  SQLCHAR szName[NAME_LEN], szPhone[PHONE_LEN];


  SQLINTEGER sCustID, cbName, cbCustID, cbPhone;


  SQLHSTMT hstmt;


  SQLRETURN retcode;


  retcode = SQLExecDirect(hstmt,


  "SELECT CUSTID, NAME, PHONE FROM CUSTOMERS ORDER BY 2, 1, 3",


  SQL_NTS);


  if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)


  {


  "


  SQLBindCol(hstmt, 1, SQL_C_ULONG, &sCustID, 0, &cbCustID);


  SQLBindCol(hstmt, 2, SQL_C_CHAR, szName, NAME_LEN, &cbName);


  SQLBindCol(hstmt, 3, SQL_C_CHAR, szPhone, PHONE_LEN, &cbPhone);


  "


  "


  while (TRUE)


  {


  retcode = SQLFetch(hstmt);


  if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO)


  {


  show_error();


  }


  if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)


  {


  fprintf(out, "%-*s %-5d %*s", NAME_LEN-1, szName,


  sCustID, PHONE_LEN-1, szPhone);


  }


  else


  {


  break;


  }


  }


  }

上一篇[布爾矩陣]    下一篇 [磷酸鋁鈉]

相關評論

同義詞:暫無同義詞