使用 WCF 服務模型在 SQL 中叫用弱式類型預存程式
當您在 [加入配接器服務參考外掛程式] 的 [ 程式 ] 節點底下叫用程式時,輸出的格式為 DataSet 陣列。 本主題提供如何建立 WCF 用戶端以在傳回 DataSet 陣列的 SQL Server叫用預存程式的指示。
注意
如果您要對具有使用者定義型別資料行的資料表執行作業,請務必先使用 SQL 配接器來參考 具有 User-Defined 類型的資料表和檢視作業 ,然後再開始開發應用程式。
關於本主題中使用的範例
本主題中的範例會使用 GET_EMP_DETAILS 預存程式。 此預存程式會採用員工識別碼作為輸入參數,並傳回具有該識別碼之員工的所有對應資料行。 GET_EMP_DETAILS預存程式是藉由執行範例所提供的 SQL 腳本來建立。 如需範例的詳細資訊,請參閱 配接器範例。 SQL 配接器範例也會提供以本主題為基礎的範例 Execute_StoredProc。
WCF 用戶端類別
下表列出使用 SQL 配接器叫用 [程式 ] 節點底下叫用預存程式的 WCF 用戶端名稱。
SQL Server資料庫成品 | WCF 用戶端名稱 |
---|---|
程式 (在 [ 程式 ] 節點底下) | Procedures_[schema]Client |
[schema] 是程式所屬的架構;例如 「dbo」。
叫用預存程式的方法簽章
下表顯示公開以叫用預存程式之 方法的簽章。
作業 | 方法簽章 |
---|---|
程序名稱 | System.Data.DataSet[] [procedure_name] (param1, param2, ...) |
[procedure_name] 是程式的名稱;例如,GET_EMP_DETAILS
例如,叫用GET_EMP_DETAILS程式的方法簽章會顯示在下列程式碼片段中。
public partial class Procedures_dboClient : System.ServiceModel.ClientBase<Procedures_dbo>, Procedures_dbo {
public System.Data.DataSet[] GET_EMP_DETAILS(System.Nullable<int> emp_id, out int ReturnValue);
}
在此程式碼片段中,
Procedures_dboClient
是 WCF 用戶端類別的名稱。 在此範例中,您會使用此類別來建立用戶端來叫用預存程式。public System.Data.DataSet[] GET_EMP_DETAILS(System.Nullable<int> emp_id, out int ReturnValue)
是您在此範例中叫用以叫用預存程式的方法。 此預存程式會採用員工識別碼,並傳回 DataSet 陣列。
建立 WCF 用戶端以在 SQL Server 中叫用預存程式
使用 WCF 用戶端在 SQL Server 上執行作業所需的一般動作集,牽涉到一組使用配接器之WCF 服務模型概觀中所述的工作。 本節特別描述如何建立會叫用預存程式的 WCF 用戶端,也就是 DataSet 陣列的結果集。 在本主題中,您會叫用預存程式GET_EMP_DETAILS。 此預存程式是藉由執行每個範例所提供的 SQL 腳本來建立。
在 Visual Studio 中建立 Visual C# 專案。 針對本主題,建立主控台應用程式。
為預存程式產生GET_EMP_DETAILS WCF 用戶端類別。 請務必在 [ 程式 ] 節點下選取程式。 如需產生 WCF 用戶端類別的詳細資訊,請參閱產生 WCF 用戶端或 wcf 服務合約以SQL Server成品。
重要
產生 WCF 用戶端類別之前,請確定您將 EnableBizTalkCompatibilityMode 系結屬性設定為 false。
在 方案總管中,新增 和
Microsoft.ServiceModel.Channels
的Microsoft.Adapters.Sql
參考。開啟 Program.cs 檔案,並建立用戶端,如下列程式碼片段所述。
Procedures_dboClient client = new Procedures_dboClient("SqlAdapterBinding_Procedures_dbo"); client.ClientCredentials.UserName.UserName = "<Enter username here>"; client.ClientCredentials.UserName.Password = "<Enter password here>";
在此程式碼片段中,
Procedures_dboClient
是 SqlAdapterBindingClient.cs 中定義的 WCF 用戶端。 此檔案是由新增配接器服務參考外掛程式所產生。SqlAdapterBinding_Procedures_dbo
是用戶端端點組態的名稱,且定義于 app.config 中。此檔案也會由 [新增配接器服務參考外掛程式] 產生,並包含系結屬性和其他組態設定。注意
在此程式碼片段中,您會使用組態檔中的系結和端點位址。 您也可以在程式碼中明確指定這些值。 如需指定用戶端系結之不同方式的詳細資訊,請參閱 設定 SQL 配接器的用戶端系結。
開啟用戶端,如下列程式碼片段所述:
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }
叫用GET_EMP_DETAILS預存程式。 在叫用GET_EMP_DETAILS程式之前,您必須將
System.Data
命名空間新增至程式碼。DataSet[] dataArray; int returnCode; try { Console.WriteLine("Calling a stored procedure..."); dataArray = client.GET_EMP_DETAILS(10001, out returnCode); //Invoke the stored procedure } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; } Console.WriteLine("The details for the employee with ID '10001' are:"); Console.WriteLine("*************************************************"); foreach (DataSet dataSet in dataArray) { foreach (DataTable tab in dataArray[0].Tables) { foreach (DataRow row in tab.Rows) { for (int i = 0; i < tab.Columns.Count; i++) { Console.WriteLine(row[i]); } } } } Console.WriteLine("*************************************************");
如下列程式碼片段所述關閉用戶端:
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
建置專案,然後加以執行。 您 pr 之員工的詳細資料
識別碼的 ovided 會顯示在主控台上。