共用方式為


使用 WCF 服務模型在 Oracle 資料庫中執行 SQLEXECUTE 作業

Microsoft BizTalk Adapter for Oracle Database 在 Oracle 資料庫成品上呈現一組標準作業。 藉由使用這些作業,您可以執行呼叫 Oracle 函式或程式等動作,或在資料表上執行基本的 SQL 資料操作語言 (DML) 作業。 不過,您的商務邏輯可能會有需要您執行 Oracle 資料庫配接器未呈現的作業所驅動的情況。 例如,您可能想要:

  • 在 Oracle 資料庫配接器未呈現的資料庫成品上執行作業;例如,取得 Oracle SEQUENCE 的 CURVAL 或 NEXTVAL。

  • 執行資料定義語言作業;例如,建立資料表。

  • 在設計階段不存在的資料庫成品上執行作業;例如,更新商務邏輯所建立之臨時表中的記錄。

  • 在資料表上執行比 Oracle 資料庫配接器介面的作業更複雜的 DML 作業;例如,若要執行包含 JOIN 子句的查詢。

    針對這類案例,Oracle 資料庫配接器會顯示 SQLEXECUTE 作業。 藉由使用 SQLEXECUTE 作業,您可以在 Oracle 資料庫上執行參數化 SQL 語句。 SQLEXECUTE 作業支援由參數集組成的輸入參數區塊,可讓您針對每個集合執行相同的 SQL 語句一次。 SQLEXECUTE 作業會傳回泛型記錄集中 SQL 語句的結果。

關於本主題中使用的範例

本主題中的範例會使用名為 TID_SEQ 的 Oracle SEQUENCE。 SDK 範例會提供產生此 SEQUENCE 的腳本。 如需 SDK 範例的詳細資訊,請參閱 SDK 中的範例

WCF 用戶端類別

WCF 服務模型會產生 SQLEXECUTE 作業的專用 WCF 用戶端 SQLEXECUTEClient。 下列程式碼顯示您呼叫以叫用 SQLEXECUTE 作業之方法的 SQLEXECUTEClient 和簽章。

public partial class SQLEXECUTEClient : System.ServiceModel.ClientBase<SQLEXECUTE>, SQLEXECUTE {  
  
    ...  
  
    public microsoft.lobservices.oracledb._2007._03.GenRecordRow[] SQLEXECUTE(string SQLSTATEMENT, string PARAMETERSCHEMA, microsoft.lobservices.oracledb._2007._03.PARAMETERDATA[] PARAMETERSET);   
}  

SQLEXECUTE 作業會傳回一般記錄集。 如果 SQLEXECUTE 作業執行的語句所傳回的任何) ,此記錄集就會包含值 (。 您可以將一組輸入參數傳遞至 PARAMETERDATA 物件集合中的 SQLEXECUTE 作業,每個參數都包含以字串表示的輸入參數集合。 下列程式碼顯示 PARAMETERDATA 集合的定義。

namespace microsoft.lobservices.oracledb._2007._03 {  
    using System.Runtime.Serialization;  
  
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]  
    [System.Runtime.Serialization.DataContractAttribute()]  
    public partial class PARAMETERDATA : object, System.Runtime.Serialization.IExtensibleDataObject {  
  
        ...  
  
        private string[] PARAMETERField;  
  
        ...  
  
        [System.Runtime.Serialization.DataMemberAttribute()]  
        public string[] PARAMETER {  
            get {  
                return this.PARAMETERField;  
            }  
            set {  
                this.PARAMETERField = value;  
            }  
        }  
    }  
}  

叫用 SQLEXECUTE 作業

若要使用 WCF 用戶端叫用 SQLEXECUTE 作業,請執行下列步驟。

  1. 產生目標資料表或檢視表的 SQLEXECUTEClient 類別。

    重要

    SQLEXECUTE 作業會顯示在根節點底下, (/) 在 [新增配接器服務參考] 對話方塊的[選取類別] 窗格中。

  2. 建立 SQLEXECUTEClient 類別的實例,並叫用 SQLEXECUTE 方法以在 Oracle 資料庫上執行 SQL 語句。

    如需如何在 Oracle 資料庫配接器上建立 WCF 用戶端類別和叫用作業的詳細資訊,請參閱 使用 Oracle 資料庫配接器概觀 WCF 服務模型

    下列範例會藉由執行下列 SQL 語句,使用 SQLEXECUTEClient 來取得 Oracle SEQUENCE 的下一個值,TID_SEQ: SELECT tid_seq.nextval id from DUAL 。 然後,輸出會寫入主控台。

using (SQLEXECUTEClient sqlClient = new SQLEXECUTEClient("OracleDBBinding_SQLEXECUTE"))  
{  
    sqlClient.ClientCredentials.UserName.UserName = "SCOTT";  
    sqlClient.ClientCredentials.UserName.Password = "TIGER";  
    try  
    {  
        sqlClient.Open();  
    }  
    catch (Exception ex)  
    {  
        Console.WriteLine("Error opening SQL client " + ex.Message);  
        throw;  
    }  
    microsoft.lobservices.oracledb._2007._03.GenRecordRow[] sequenceRec =   
        new microsoft.lobservices.oracledb._2007._03.GenRecordRow[0];  
  
    try  
    {  
        sequenceRec = sqlClient.SQLEXECUTE("SELECT tid_seq.nextval id from DUAL", null, null);  
    }  
    catch (Exception ex)  
    {  
        Console.WriteLine("Error executing SQL client " + ex.Message);  
        throw;  
    }  
  
    if (sequenceRec.Length > 0)  
    {  
        Console.WriteLine("TID_SEQUENCE value is {0}", sequenceRec[0].GenRecordColumn[0].ColumnValue);  
    }  
    else  
    {  
    Console.WriteLine("Couldn't get next TID_SEQUENCE value");  
    }  
}  

另請參閱

使用 WCF 服務模型開發 Oracle 資料庫應用程式