使用 WCF 服务模型在 SQL Server 中调用标量函数

可以使用 WCF 服务模型在 .NET 应用程序中使用 SQL 适配器,以调用 SQL Server 中的标量函数。 适配器将标量函数公开为可直接在SQL Server调用的方法。 有关适配器如何支持标量函数的详细信息,请参阅使用 SQL 适配器在 SQL Server 中执行标量函数

本主题演示如何使用 WCF 服务模型调用标量函数

本主题演示如何在SQL Server数据库中调用 GET_EMP_ID 函数。 GET_EMP_ID 函数采用 Employee 表中雇员 的指定并返回相应的员工 ID。 GET_EMP_ID 函数和 Employee 表是通过运行示例提供的 SQL 脚本创建的。 有关详细信息,请参阅 适配器示例

关于本主题中使用的示例

本主题中的示例调用了 Employee 表上的 GET_EMP_ID 标量函数。 GET_EMP_ID 函数和 Employee 表是通过运行示例提供的 SQL 脚本创建的。 SQL 适配器示例还提供了基于本主题 ScalarFunction_ServiceModel示例。 有关详细信息,请参阅 适配器示例

WCF 客户端类

下表列出了为使用 SQL 适配器在 SQL Server 中调用标量函数而生成的 WCF 客户端的名称。

SQL Server数据库项目 WCF 客户端名称
标量函数 ScalarFunctions_[SCHEMA]客户端

[SCHEMA] = SQL Server项目的集合;例如,dbo。

用于调用标量函数的方法签名

下表显示了对表的基本操作的方法签名。 视图的签名相同,只是视图命名空间和名称替换了表的签名。

操作 方法签名
标量函数名称 public <return_type><scalar_function_name> (param1、 param2... )

< > retrun_type= 函数定义中定义的返回类型

< > scalar_function_name= 标量函数的名称。

例如,以下代码演示 dbo 架构中为 GET_EMP_ID 标量函数生成的 WCF 客户端类的方法签名,该类采用员工指定作为参数,并返回员工 ID (整数) 。

public partial class ScalarFunctions_dboClient : System.ServiceModel.ClientBase<ScalarFunctions_dbo>, ScalarFunctions_dbo {      
    public System.Nullable<int> GET_EMP_ID(string emp_desig);  
}  

在此代码片段中, ScalarFunctions_dboClient 是添加适配器服务引用插件生成的 SqlAdapterBindingClient.cs 中的 WCF 类的名称。

用于调用标量函数的参数

SQL 适配器公开用于调用标量函数的方法的参数与 SQL Server 中的标量函数定义中定义的参数相同。 例如,用于调用GET_EMP_ID标量函数的参数emp_desig并采用员工的指定。

同样,标量函数的返回值与 SQL Server 中的标量函数定义中定义的返回值相同。 例如,GET_EMP_ID 函数的返回值是整数类型的员工 ID。

创建 WCF 客户端以调用标量函数

使用 WCF 客户端对 SQL Server 执行操作所需的一组泛型操作涉及使用 SQL 适配器的 WCF 服务模型概述中所述的一组任务。 本部分介绍如何创建 WCF 客户端来调用 GET_EMP_ID 标量函数。

创建 WCF 客户端

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

  2. GET_EMP_ID 标量函数生成 WCF 客户端类。 有关生成 WCF 客户端类的详细信息,请参阅为SQL Server项目生成 WCF 客户端或 WCF 服务协定

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

  4. 打开 Program.cs 并按以下代码片段中所述创建客户端。

    
              ScalarFunctions_dboClient client = new ScalarFunctions_dboClient("SqlAdapterBinding_ScalarFunctions_dbo");  
    client.ClientCredentials.UserName.UserName = "<Enter user name here>";  
    client.ClientCredentials.UserName.Password = "<Enter password here>";  
    

    在此代码片段中, ScalarFunctions_dboClient 是在 SqlAdapterBindingClient.cs 中定义的 WCF 客户端。 此文件由添加适配器服务引用插件生成。 SqlAdapterBinding_ScalarFunctions_dbo 是客户端终结点配置的名称,在 app.config 中定义。此文件也由添加适配器服务引用插件生成,并包含绑定属性和其他配置设置。

    注意

    在此代码片段中,使用配置文件中的绑定和终结点地址。 还可以在代码中显式指定这些值。 有关指定然后客户端绑定的不同方法的详细信息,请参阅 为 SQL 适配器配置客户端绑定

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

    try  
    {  
       Console.WriteLine("Opening Client...");  
       client.Open();  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    
  6. 调用 GET_EMP_ID 函数以检索指定为“经理”的员工的 ID。

    Console.WriteLine("Invoking the GET_EMP_ID function");  
    string emp_designation = "Manager";  
    try  
    {  
          System.Nullable<int> emp_id = client.GET_EMP_ID(emp_designation);  
          Console.WriteLine("The Employee ID for the employee with 'Manager' designation is:" + emp_id);  
    }  
    catch (Exception e)  
    {  
          Console.WriteLine("Exception: " + e.Message);  
          throw;  
    }  
    

    注意

    为简单起见, “员工 ”表只有一名具有“经理”称号的员工。 如果目标表具有更多具有相同称号的员工,则必须相应地定义函数。

  7. 如以下代码片段中所述关闭客户端:

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  8. 生成项目,然后运行它。 应用程序显示员工的员工 ID,其名称为“经理”。

另请参阅

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