使用 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 脚本创建的。

  1. 在 Visual Studio 中创建 Visual C# 项目。 对于本主题,请创建控制台应用程序。

  2. 为GET_EMP_DETAILS存储过程生成 WCF 客户端类。 请确保选择“过程”节点下 的过程 。 有关生成 WCF 客户端类的详细信息,请参阅为SQL Server项目生成 WCF 客户端或 WCF 服务协定

    重要

    在生成 WCF 客户端类之前,请确保将 EnableBizTalkCompatibilityMode 绑定属性设置为 false。

  3. 在解决方案资源管理器,添加对 和 Microsoft.ServiceModel.ChannelsMicrosoft.Adapters.Sql引用。

  4. 打开 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 适配器配置客户端绑定

  5. 打开客户端,如以下代码片段中所述:

    try  
    {  
       Console.WriteLine("Opening Client...");  
       client.Open();  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    
  6. 调用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("*************************************************");  
    
    
  7. 关闭客户端,如以下代码片段中所述:

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  8. 生成项目,然后运行它。 你请求的员工的详细信息

  9. ID 显示在主机上。

另请参阅

使用 WCF 服务模型开发应用程序