直接執行 ODBC

直接執行是執行陳述式的最簡易方式。 提交陳述式以供執行時,資料來源會將陳述式編譯為存取計畫,然後執行該存取計畫。

泛型應用程式經常在執行階段使用直接執行,來組建及執行陳述式。 例如,下列程式碼會組建 SQL 陳述式並執行一次:

SQLCHAR *SQLStatement;  
  
// Build an SQL statement.  
BuildStatement(SQLStatement);  
  
// Execute the statement.  
SQLExecDirect(hstmt, SQLStatement, SQL_NTS);  

直接執行最適合預計只執行一次的陳述式。 其主要缺點是每次執行 SQL 陳述式時,都會進行剖析。 此外,在執行陳述式之後,應用程式才能擷取陳述式所建立之結果集的相關資訊 (如有)。如果陳述式已準備就緒,並在兩個不同的步驟中執行,就可能發生這種情況。

若要直接執行陳述式,應用程式會執行下列動作:

  1. 設定任何參數的值。 如需詳細資訊,請參閱本節稍後討論的陳述式參數 (機器翻譯)。

  2. 呼叫 SQLExecDirect,並傳遞包含 SQL 陳述式的字串。

  3. 呼叫 SQLExecDirect 時,驅動程式會執行以下動作:

    • 修改 SQL 陳述式以使用資料來源的 SQL 文法,而不剖析陳述式。這包含取代 ODBC 中的逸出序列 (機器翻譯) 所討論的逸出序列。 應用程式可以藉由呼叫 SQLNativeSql 來擷取 SQL 陳述式的修改形式。 如果已設定 SQL_ATTR_NOSCAN 陳述式屬性,則不會取代逸出序列。

    • 擷取目前的參數值,並視需要轉換。 如需詳細資訊,請參閱本節稍後討論的陳述式參數 (機器翻譯)。

    • 將陳述式和已轉換的參數值傳送至資料來源,以供執行。

    • 傳回任何錯誤。 其中包含排序或狀態診斷,例如 SQLSTATE 24000 (不正確資料指標狀態)、SQLSTATE 42000 (語法錯誤或存取違規),以及 SQLSTATE 42S02 (基底資料表或找不到檢視等語意錯誤)。