1. 程式人生 > >準備和執行語句 (ODBC)

準備和執行語句 (ODBC)

準備一次語句,然後多次執行它

  1. (可選) 呼叫SQLNumParams來確定已準備的語句中的引數數量。

  2. (可選)對於預定義語句中的每個引數:

  3. 對於每次執行預定義語句:

    • 如果語句有引數標記,請將資料值放到繫結引數緩衝區中。

用按列引數繫結預定義語句

    • 將 SQL_ATTR_PARAMSET_SIZE 設定為引數集 (S) 的數目。

    • 將 SQL_ATTR_PARAM_BIND_TYPE 設定為 SQL_PARAMETER_BIND_BY_COLUMN。

    • 將 SQL_ATTR_PARAMS_PROCESSED_PTR 屬性設定為指向 SQLUINTEGER 變數,以包含所處理的引數個數。

    • 將 SQL_ATTR_PARAMS_STATUS_PTR 設定為指向 SQLUSSMALLINT 變數的陣列 array[S],以包含引數狀態指示器。

  1. 呼叫 SQLPrepare 準備語句。

  2. (可選) 呼叫SQLNumParams來確定已準備的語句中的引數數量。

  3. (可選) 對於預定義語句中的每個引數,呼叫 SQLDescribeParam 以獲得引數資訊。

  4. 對於每個引數標記:

    • 分配 S 引數緩衝區的陣列以儲存資料值。

    • 分配 S 引數緩衝區的陣列以儲存資料長度。

    • 呼叫 SQLBindParameter 若要將引數資料值和資料長度陣列繫結到語句引數。

    • 如果引數是執行時資料文字或映像引數,則設定它。

    • 如果使用任何執行時資料引數,則設定它們。

  5. 對於每次執行預定義語句:

    • 將 S 個數據值和 S 個數據長度放到繫結引數陣列中。

    • 呼叫 SQLExecute 執行已準備的語句。

    • 如果使用執行時資料輸入的引數,SQLExecute 將返回 SQL_NEED_DATA。 通過使用 SQLParamData 和 SQLPutData 分塊區傳送資料。

用按行繫結引數預定義語句

  1. 分配結構陣列 [S],其中,S 是引數的集合數。 該結構對於每個引數有一個元素,並且每個元素有兩部分:

    • 第一部分是合適的資料型別的變數,以包含引數資料。

    • 第二部分是 SQLINTEGER 變數,以包含狀態指示器。

    • 將 SQL_ATTR_PARAMSET_SIZE 設定為引數集 (S) 的數目。

    • 將 SQL_ATTR_PARAM_BIND_TYPE 設定為在步驟 1 中分配的結構的大小。

    • 將 SQL_ATTR_PARAMS_PROCESSED_PTR 屬性設定為指向 SQLUINTEGER 變數,以包含所處理的引數個數。

    • 將 SQL_ATTR_PARAMS_STATUS_PTR 設定為指向 SQLUSSMALLINT 變數的陣列 array[S],以包含引數狀態指示器。

  2. 呼叫 SQLPrepare 準備語句。

  3. 對於每個引數標記,呼叫 SQLBindParameter 為引數資料值和資料長度指標指向其在步驟 1 中分配的結構陣列的第一個元素中的變數。 如果引數是執行時資料引數,則設定它。

  4. 對於每次執行預定義語句:

    • 用資料值填充繫結引數緩衝區陣列。

    • 呼叫 SQLExecute 執行已準備的語句。 驅動程式將有效地執行 SQL 語句 S 次,每組引數一次。

    • 如果使用執行時資料輸入的引數,SQLExecute 將返回 SQL_NEED_DATA。 通過使用 SQLParamData 和 SQLPutData 分塊區傳送資料。