使用 WCF 服務模型在 SQL 中執行Reader、ExecuteScalar 或 ExecuteNonQuery 作業
SQL 配接器會公開泛型SQL Server作業,例如ExecuteNonQuery、ExecuteReader和ExecuteScalar。 您可以使用這些作業,在SQL Server資料庫上執行任何 SQL 語句。 這些作業會根據您為 SQL 語句取得的回應類型而有所不同。 如需配接器如何支援這些作業的詳細資訊,請參閱 ExecuteNonQuery、ExecuteReader 和 ExecuteScalar 作業的支援。
本主題示範如何使用 WCF 服務模型,使用 SQL 配接 器執行 ExecuteReader 作業。 您可以遵循本主題中所述的相同程式集來執行 ExecuteNonQuery 和 ExecuteScalar 作業。
關於本主題中使用的範例
本主題中的範例會使用 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 作業
在 Visual Studio 中建立 Visual C# 專案。 針對本主題,建立主控台應用程式。
產生 ExecuteReader 泛型作業的 WCF 用戶端類別。 當您使用 [新增配接器服務參考外掛程式] 連線到 SQL Server 資料庫時,此作業可在根節點下使用。 如需產生 WCF 用戶端類別的詳細資訊,請參閱產生 WCF 用戶端或 wcf 服務合約以SQL Server成品。
重要
產生 WCF 用戶端類別之前,請確定您將 EnableBizTalkCompatibilityMode 系結屬性設定為 false。
在 方案總管中,新增 和
Microsoft.ServiceModel.Channels
的Microsoft.Adapters.Sql
參考。開啟 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 配接器的用戶端系結。
開啟用戶端,如下列程式碼片段所述:
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }
叫用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("*****************************************************");
如下列程式碼片段所述關閉用戶端:
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
建置專案,然後加以執行。 新插入員工的員工識別碼會顯示在主控台上。