共用方式為


使用 WCF 服務模型在 SQL 中執行Reader、ExecuteScalar 或 ExecuteNonQuery 作業

SQL 配接器會公開泛型SQL Server作業,例如ExecuteNonQueryExecuteReaderExecuteScalar。 您可以使用這些作業,在SQL Server資料庫上執行任何 SQL 語句。 這些作業會根據您為 SQL 語句取得的回應類型而有所不同。 如需配接器如何支援這些作業的詳細資訊,請參閱 ExecuteNonQuery、ExecuteReader 和 ExecuteScalar 作業的支援

本主題示範如何使用 WCF 服務模型,使用 SQL 配接 器執行 ExecuteReader 作業。 您可以遵循本主題中所述的相同程式集來執行 ExecuteNonQueryExecuteScalar 作業。

關於本主題中使用的範例

本主題中的範例會使用 ExecuteReader 作業來執行預存程式ADD_EMP_DETAILS。 此預存程式會將記錄新增至 Employee 資料表,並傳回記錄的員工識別碼。 ADD_EMP_DETAILS預存程式是藉由執行範例所提供的 SQL 腳本來建立。 如需範例的詳細資訊,請參閱 配接器範例。 SQL 配接器範例也會提供以本主題為基礎的範例 Execute_Reader

WCF 用戶端類別

下表列出使用 SQL 配接器叫用泛型作業 (ExecuteNonQuery、ExecuteReader 或 ExecuteScalar) 產生的 WCF 用戶端名稱。

Operations WCF 用戶端名稱
ExecuteNonQuery、ExecuteReader 或 ExecuteScalar GenericTableOpClient

叫用泛型作業的方法簽章

下表顯示公開以叫用泛型作業的方法簽章。

作業 方法簽章
ExecuteNonQuery int ExecuteNonQuery (字串查詢)
ExecuteReader System.Data.DataSet[] ExecuteReader (字串查詢)
ExecuteScalar string ExecuteScalar (string Query)

例如,泛型作業方法的簽章會顯示在下列程式碼片段中。

public partial class GenericTableOpClient : System.ServiceModel.ClientBase<GenericTableOp>, GenericTableOp {  
  public int ExecuteNonQuery(string Query);  
  public System.Data.DataSet[] ExecuteReader(string Query);  
  public string ExecuteScalar(string Query);  
}  

在此程式碼片段中,

  • GenericTableOpClient 是 類別的名稱。 在此範例中,您會使用這個類別來建立用戶端來叫用泛型作業 ExecuteReader。

  • public System.Data.DataSet[] ExecuteReader(string Query) 是您在此範例中叫用以叫用ADD_EMP_DETAILS預存程式的方法。

建立 WCF 用戶端以叫用 ExecuteReader 作業

使用 WCF 用戶端在 SQL Server 上執行作業所需的一組泛型動作,牽涉到使用 SQL 配接器之 WCF 通道模型概觀中所述的一組工作。 本節特別描述如何建立 WCF 用戶端,以叫用 ExecuteReader 作業來執行預存程式ADD_EMP_DETAILS。 此預存程式是藉由執行每個範例所提供的 SQL 腳本來建立。

建立 WCF 用戶端以叫用 ExecuteReader 作業

  1. 在 Visual Studio 中建立 Visual C# 專案。 針對本主題,建立主控台應用程式。

  2. 產生 ExecuteReader 泛型作業的 WCF 用戶端類別。 當您使用 [新增配接器服務參考外掛程式] 連線到 SQL Server 資料庫時,此作業可在根節點下使用。 如需產生 WCF 用戶端類別的詳細資訊,請參閱產生 WCF 用戶端或 wcf 服務合約以SQL Server成品

    重要

    產生 WCF 用戶端類別之前,請確定您將 EnableBizTalkCompatibilityMode 系結屬性設定為 false。

  3. 在 方案總管中,新增 和 Microsoft.ServiceModel.ChannelsMicrosoft.Adapters.Sql 參考。

  4. 開啟 Program.cs 檔案,並建立用戶端,如下列程式碼片段所述。

    
            GenericTableOpClient client = new GenericTableOpClient("SqlAdapterBinding_GenericTableOp");  
    client.ClientCredentials.UserName.UserName = "<Enter username here>";  
    client.ClientCredentials.UserName.Password = "<Enter password here>";  
    

    在此程式碼片段中, GenericTableOpClient 是 SqlAdapterBindingClient.cs 中定義的 WCF 用戶端。 此檔案是由新增配接器服務參考外掛程式所產生。 SqlAdapterBinding_GenericTableOp 是用戶端端點組態的名稱,且定義于 app.config 中。此檔案也會由 [新增配接器服務參考外掛程式] 產生,並包含系結屬性和其他組態設定。

    注意

    在此程式碼片段中,您會使用組態檔中的系結和端點位址。 您也可以在程式碼中明確指定這些值。 如需指定用戶端系結之不同方式的詳細資訊,請參閱 設定 SQL 配接器的用戶端系結

  5. 開啟用戶端,如下列程式碼片段所述:

    try  
    {  
       Console.WriteLine("Opening Client...");  
       client.Open();  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    
  6. 叫用ADD_EMP_DETAILS預存程式的 ExecuteReader 作業。 在叫用 ExecuteReader 作業之前,您必須將 System.Data 命名空間新增至程式碼。

    string query = "EXEC ADD_EMP_DETAILS 'Tom Smith', 'Manager', 500000";  
    DataSet[] dsArray = client.ExecuteReader(query);  
    
    Console.WriteLine("Invoking the ADD_EMP_DETAILS stored procedure using ExecuteReader");  
    Console.WriteLine("*****************************************************");  
    foreach (DataSet dataSet in dsArray)  
    {  
       foreach (DataTable tab in dsArray[0].Tables)  
       {  
           foreach (DataRow row in tab.Rows)  
           {  
              for (int i = 0; i < tab.Columns.Count; i++)  
              {  
                 Console.WriteLine("The ID for the newly added employee is : " + row[i]);  
              }  
           }  
        }  
    }  
    Console.WriteLine("*****************************************************");  
    
    
  7. 如下列程式碼片段所述關閉用戶端:

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  8. 建置專案,然後加以執行。 新插入員工的員工識別碼會顯示在主控台上。