使用 WCF 服务模型在 SQL 中调用弱类型存储过程

调用“添加适配器服务引用插件”中的 “过程 ”节点下列出的过程时,输出采用数据集数组的形式。 本主题提供有关如何创建 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 脚本创建的。

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

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

    重要

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

  3. 在解决方案资源管理器中,添加对 Microsoft.Adapters.SqlMicrosoft.ServiceModel.Channels的引用。

  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 服务模型开发应用程序