可以使用 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 脚本创建的。 基于本主题的示例 ScalarFunction_ServiceModel 也作为 SQL 适配器示例的一部分提供。 有关详细信息,请参阅 适配器示例。
WCF 客户端类
下表中列出了使用 SQL 适配器调用 SQL Server 中标量函数而生成的 WCF 客户端的名称。
SQL Server 数据库工件 | WCF 客户端名称 |
---|---|
标量函数 | ScalarFunctions_[SCHEMA]Client |
[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 客户端
在 Visual Studio 中创建 Visual C# 项目。 对于本主题,请创建控制台应用程序。
为 GET_EMP_ID 标量函数生成 WCF 客户端类。 有关生成 WCF 客户端类的详细信息,请参阅 为 SQL Server 项目生成 WCF 客户端或 WCF 服务协定。
在解决方案资源管理器中,添加对
Microsoft.Adapters.Sql
和Microsoft.ServiceModel.Channels
的引用。打开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 适配器配置客户端绑定。
按以下代码片段中所述打开客户端:
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }
调用 GET_EMP_ID 函数,以检索指定为“Manager”的员工的 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; }
注释
为简单起见, Employee 表只有一位具有“经理”称号的员工。 如果目标表中有更多具有相同职位的员工,则必须相应地定义该函数。
按以下代码片段中所述关闭客户端:
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
生成项目,然后运行它。 应用程序显示职称为“经理”的员工的员工编号。