调用“添加适配器服务引用插件”中的 “过程 ”节点下列出的过程时,输出采用数据集数组的形式。 本主题提供有关如何创建 WCF 客户端以调用 SQL Server 中返回数据集数组的存储过程的说明。
注释
如果对包含用户定义类型列的表进行操作,请确保在开始开发应用程序之前,参考 使用 SQL 适配器在具有 User-Defined 类型的表和视图上操作。
关于本主题中使用的示例
本主题中的示例使用GET_EMP_DETAILS存储过程。 此存储过程采用员工 ID 作为输入参数,并返回具有该 ID 的员工的所有相应列。 GET_EMP_DETAILS存储过程是通过运行随示例提供的 SQL 脚本创建的。 有关示例的详细信息,请参阅 适配器示例。 SQL 适配器示例中还提供了一个名为Execute_StoredProc的示例,该示例基于本主题。
WCF 客户端类
下表中列出了使用 SQL 适配器在 过程 节点下生成的 WCF 客户端名称,这些客户端用于调用存储过程。
| SQL Server 数据库工件 | WCF 客户端名称 |
|---|---|
| 过程(在 “过程 ”节点下) | Procedures_[架构]客户端 |
[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)是在此示例中调用的方法,用于调用存储过程。 此存储过程采用员工 ID 并返回 DataSet 数组。
创建 WCF 客户端以调用 SQL Server 中的存储过程
使用 WCF 客户端在 SQL Server 上执行作所需的泛型作集涉及一组任务,这些任务在 适配器的 WCF 服务模型概述中介绍。 本部分专门介绍如何创建一个 WCF 客户端以调用存储过程,其结果集是一个 DataSet 数组。 在本主题中,您将调用例如GET_EMP_DETAILS的存储过程。 此存储过程是通过运行随每个示例提供的 SQL 脚本创建的。
在 Visual Studio 中创建 Visual C# 项目。 对于本主题,请创建控制台应用程序。
为GET_EMP_DETAILS存储过程生成 WCF 客户端类。 请确保在 “过程 ”节点下选择该过程。 有关生成 WCF 客户端类的详细信息,请参阅 为 SQL Server 项目生成 WCF 客户端或 WCF 服务协定。
重要
在生成 WCF 客户端类之前,请确保将 EnableBizTalkCompatibilityMode 绑定属性设置为 false。
在解决方案资源管理器中,添加对
Microsoft.Adapters.Sql和Microsoft.ServiceModel.Channels的引用。打开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();生成项目,然后运行它。 员工的详细信息是您提供的
提供的ID显示在控制台上。