使用 WCF 服务模型在 SQL 中调用弱类型存储过程
调用“添加适配器服务引用插件”的“ 过程 ”节点下列出的过程时,输出采用 DataSet 数组的形式。 本主题提供有关如何创建 WCF 客户端以调用返回 DataSet 数组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]客户端 |
[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.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();
生成项目,然后运行它。 你请求的员工的详细信息
ID 显示在主机上。