Command 物件 (OLE DB Provider for DB2)
Command 物件是由 OLE DB 取用者或代表取用者的服務提供者所建立。 Command 對像是用來在遠端 DB2 資料庫伺服器上執行分散式關係資料庫架構, (DRDA) 特定的命令,以DRDA 應用程式伺服器身分運作。 Command 物件支援在連線以移除DRDA 應用程式伺服器時執行 結構化查詢語言 (SQL) (SQL) 命令。
命令用於數據定義,例如建立數據表或授與許可權,以及數據操作,例如更新或刪除數據列。 使用 Command 對象進行數據操作的特殊案例是根據 DB2 資料表建立數據列集。 搭配 DB2 資料庫伺服器使用命令文字時,命令中指定的數據表名稱預設會傳遞為大寫。 如果數據表名稱使用混合大小寫,則必須在引號字串中傳遞數據表名稱。
取用者必須先判斷是否支援命令,才能使用命令。 若要這樣做,取用者會在會話上呼叫IdBCreateCommand的QueryInterface。 如果公開此介面,提供者支援命令。 若要建立命令,取用者接著會在會話上呼叫 IDBCreateCommand::CreateCommand 。 單一會話可用來建立多個命令。
第一次建立命令時,它不包含命令文字。 取用者會使用 ICommandText::SetCommandText 來設定命令文字。 由於文字命令語法是提供者特定的,取用者會傳遞要使用的語法 (GUID) 全域唯一識別符。 為了與 Microsoft OLE DB Provider for DB2 搭配使用,GUID 會DBGUID_DBSQL。 請注意,在 OLE DB Provider for DB2 底下,此 GUID 表示 text 命令是 ANSI SQL 的子集。 提供者支援 ANSI SQL 的層級是由 DBPROP_SQLSUPPORT 屬性所指定。 此屬性是指定 SQL 支援層級的位掩碼。
OLE DB Provider for DB2 for command text 所支持的語法與 ANSI SQL 92 Entry-Level (相同,但有一些以 DB2 伺服器平臺和版本) 為基礎的例外狀況。
有效的 SQL 命令記載於 IBM 所發行的下列發行集中:
DB2 for z/OS SQL Reference Version 9
DB2 for z/OS SQL 參考第 8 版
DB2 for IBM i SQL 參考第 6 版 1
DB2 for IBM i SQL 參考第 5 版 4
DB2 for LUW SQL 參考第 9 版
若要執行命令,取用者會呼叫 ICommand::Execute。 如果命令文字指定要開啟數據列集的命令, Execute 會具現化數據列集,並傳回它的介面指標。
目前版本的 OLE DB Provider for DB2 支援 下列 Command 物件的介面:
IAccessor
IColumnsInfo
ICommand
ICommandPrepare
ICommandProperties
ICommandText
ICommandWithParameters
IConvertType
ISupportErrorInfo
使用 ICommand 物件時,Microsoft OLE DB Provider for DB2 可能不會根據 DB2 平臺和版本,從數據存放區衍生參數類型資訊。 OLE DB 用戶端應用程式可以透過 ICommandWithParameters::SetParameterInfo 函式提供原生參數類型資訊。 OLE DB 提供者會使用 SetParameterInfo 指定的型別資訊,判斷如何將參數數據從取用者所提供的類型 (,如系結結構中的 wType 值所指示,) 數據存放區所使用的原生類型。 當取用者指定具有已知有效位數、小數字數和大小值的數據類型時,OLE DB Provider for DB2 會忽略取用者針對有效位數、小數位數或大小提供的任何資訊。
取用者提供的資訊應該正確,而且應該針對所有參數提供。 OLE DB Provider for DB2 可能會根據 DB2 平臺和版本,驗證針對參數元數據所提供的資訊,不過 OLE DB 提供者一律會判斷指定的值是提供者的法律值。 取用者提供的資訊必須正確,而且必須提供給所有參數。 OLE DB Provider for DB2 無法針對參數元數據驗證所提供的資訊,雖然 OLE DB 提供者可以判斷指定的值是提供者的法律值。 使用不正確的參數資訊或傳遞錯誤參數數目的參數資訊,執行命令的結果未定義。 例如,如果參數類型為 LONG ,而取用者在 ICommandWithParameters::SetParameterInfo 中指定DBTYPE_STR的類型指標,OLE DB Provider for DB2 會在將數據傳送至數據存放區之前,先將數據轉換成字元串。 因為數據存放區不預期 LONG,所以這可能會導致錯誤。