當您在 [新增配接器服務參考外掛程式] 的 [強型別程式 ] 節點下叫用程式時,輸出的格式為強型別結果集。 本主題提供如何建立 WCF 用戶端以在傳回強型別結果集的 SQL Server叫用預存程式的指示。
注意
如果您要對具有使用者定義型別資料行的資料表執行作業,請務必在開始開發應用程式之前,先參考 具有 User-Defined 類型的資料表和檢視上的作業 。
關於本主題中使用的範例
本主題中的範例會使用GET_EMP_DETAILS預存程式。 此預存程式會採用員工識別碼作為輸入參數,並傳回具有該識別碼之員工的所有對應資料行。 GET_EMP_DETAILS預存程式是藉由執行範例所提供的 SQL 腳本來建立。 如需範例的詳細資訊,請參閱 配接器範例。 根據本主題 的範例Execute_TypedStoredProcedure也會提供 SQL 配接器範例。
WCF 用戶端類別
下表列出使用 SQL 配接器叫用 強型別程式 節點下叫用預存程式的 WCF 用戶端名稱。
SQL Server資料庫成品 | WCF 用戶端名稱 |
---|---|
強型別程式節點下的程式 () | TypedProcedures_[schema]Client |
[schema] 是程式所屬的架構;例如 「dbo」。
叫用預存程式的方法簽章
下表顯示公開以叫用預存程式之方法的簽章。
作業 | 方法簽章 |
---|---|
程序名稱 | [PROC_NS][procedure_name] (param1, param2, ...) |
[PROC_NS] 是程式命名空間;例如,schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS。StoredProcedureResultSet0[]
[procedure_name] 是程式的名稱;例如,GET_EMP_DETAILS
例如,叫用GET_EMP_DETAILS程式的方法簽章會顯示在下列程式碼片段中。
public partial class TypedProcedures_dboClient : System.ServiceModel.ClientBase<TypedProcedures_dbo>, TypedProcedures_dbo{
public schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS.StoredProcedureResultSet0[]
GET_EMP_DETAILS(System.Nullable<int> emp_id, out int ReturnValue);
}
在此程式碼片段中,
TypedProcedures_dboClient
是 類別的名稱。 在此範例中,您會使用此類別來建立用戶端來叫用預存程式。public schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS.StoredProcedureResultSet0[] GET_EMP_DETAILS(System.Nullable<int> emp_id, out int ReturnValue)
是您在此範例中叫用以叫用預存程式的方法。 此預存程式會採用員工識別碼,並傳回強型別的結果集。
建立 WCF 用戶端以在 SQL Server中叫用預存程式
使用 WCF 用戶端在 SQL Server 上執行作業所需的一般動作集牽涉到使用 SQL 配接器之 WCF 服務模型概觀中所述的一組工作。 本節特別描述如何建立會叫用預存程式的 WCF 用戶端,也就是強型別的結果集。 在此主題中,您會叫用預存程式GET_EMP_DETAILS。 此預存程式是藉由執行每個範例所提供的 SQL 腳本來建立。
在 Visual Studio 中建立 Visual C# 專案。 針對本主題,建立主控台應用程式。
產生預存程式的 WCF 用戶端類別GET_EMP_DETAILS。 請確定您在 [強型別程式 ] 節點下選取程式。 如需產生 WCF 用戶端類別的詳細資訊,請參閱產生 WCF 用戶端或 WCF 服務合約以進行SQL Server成品。
重要
產生 WCF 用戶端類別之前,請確定您已將 EnableBizTalkCompatibilityMode 系結屬性設定為 false。
在方案總管中,新增 和
Microsoft.ServiceModel.Channels
的Microsoft.Adapters.Sql
參考。開啟 Program.cs 檔案並建立用戶端,如下列程式碼片段所述。
TypedProcedures_dboClient client = new TypedProcedures_dboClient("SqlAdapterBinding_TypedProcedures_dbo"); client.ClientCredentials.UserName.UserName = "<Enter username here>"; client.ClientCredentials.UserName.Password = "<Enter username here>";
在此程式碼片段中,
TypedProcedures_dboClient
是 SqlAdapterBindingClient.cs 中定義的 WCF 用戶端。 這個檔案是由新增配接器服務參考外掛程式所產生。SqlAdapterBinding_TypedProcedures_dbo
是用戶端端點組態的名稱,且定義于 app.config 中。此檔案也會由 [新增配接器服務參考外掛程式] 產生,並包含系結屬性和其他組態設定。注意
在此程式碼片段中,您會使用組態檔中的系結和端點位址。 您也可以在程式碼中明確指定這些值。 如需指定用戶端系結之不同方式的詳細資訊,請參閱 設定 SQL 配接器的用戶端系結。
開啟用戶端,如下列程式碼片段所述:
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }
如下列程式碼片段所述,叫用GET_EMP_DETAILS預存程式。
// Create array of type as specified in the method signature schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS.StoredProcedureResultSet0[] resultSet = new schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS.StoredProcedureResultSet0[1]; int returnCode; try { Console.WriteLine("Calling a stored procedure..."); resultSet = 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("*************************************************"); for (int i = 0; i < resultSet.Length; i++) { Console.WriteLine("Employee Name : " + resultSet[i].Name); Console.WriteLine("Employee Designation : " + resultSet[i].Designation); Console.WriteLine("Employee Salary : " + resultSet[i].Salary); } Console.WriteLine("*************************************************");
關閉用戶端,如下列程式碼片段所述:
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
建置專案,然後加以執行。 員工識別碼的名稱、指定和薪資會顯示在主控台上。