使用 WCF 通道模型在 SQL 中的表上执行插入操作

SQL 适配器发现 SQL Server 数据库表和视图上的一组基本的插入、选择、更新和删除操作。 通过使用这些操作,可以对目标表或视图执行由 WHERE 子句限定的简单 SQL 插入、选择、更新和删除语句。 本主题提供有关如何使用 WCF 通道模型对 SQL Server 数据库表执行插入作的说明。

有关适配器如何支持这些作的详细信息,请参阅 SQL 适配器对表和视图的插入、更新、删除和选择作。 有关如何使用 WCF 通道模型在 SQL Server 上执行作的详细信息,请参阅 包含 SQL 适配器的 WCF 通道模型的概述

关于本主题中使用的示例

本主题中的示例对 Employee 表进行操作。 Employee 表是通过运行示例提供的 SQL 脚本创建的。 有关示例的详细信息,请参阅 SQL 适配器的示例。 SQL 适配器示例中也包含一个基于本主题的示例EmployeeInsertOp

插入消息

若要使用 WCF 通道模型对 SQL Server 数据库执行操作,必须具有与该操作相关的请求消息。 执行对 SQL Server 数据库中 Employee 表的 Insert 操作的请求消息如下所示:

<Insert xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">  
  <Rows>  
    <Employee xmlns="http://schemas.microsoft.com/Sql/2008/05/Types/Tables/dbo">  
      <Name>Tom Smith</Name>  
      <Designation>Manager</Designation>  
      <Salary>500000</Salary>  
   </Employee>  
  </Rows>  
</Insert>  

此请求消息插入具有以下详细信息的记录:

Name = Tom Smith  
Designation = Manager  
Salary = 500000  

必须将消息复制到一个文件,例如 InsertRequest.xml。 此示例使用此文件通过 SQL 适配器将请求消息发送到 SQL Server。 有关表操作的消息架构的详细信息,请查看 用于对表和视图执行插入、更新、删除和选择的操作的消息架构

创建 WCF 通道应用程序

本部分提供有关如何创建 WCF 信道应用程序以对 Employee 表执行插入操作的说明。

创建一个 WCF 通道应用程序,用于将记录插入到 Employee 表中。

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

  2. 在解决方案资源管理器中,添加对 Microsoft.Adapters.SqlMicrosoft.ServiceModel.ChannelsSystem.ServiceModelSystem.Runtime.Serialization的引用。

  3. 打开Program.cs文件并添加以下命名空间:

    • Microsoft.Adapters.Sql

    • Microsoft.ServiceModel.Channels

    • System.ServiceModel

    • System.ServiceModel.Channels

    • System.Xml

  4. 创建绑定和终结点。

    SqlAdapterBinding binding = new SqlAdapterBinding();  
    EndpointAddress address = new EndpointAddress("mssql://mysqlserver//mydatabase?");  
    
    
  5. 创建并打开通道工厂。 此应用程序将请求消息发送到 SQL Server 并接收响应,因此必须实现 IRequestChannel 接口。

    ChannelFactory<IRequestChannel> factory = new ChannelFactory<IRequestChannel>(binding, address);  
    factory.Credentials.UserName.UserName = "<Enter user name here>";  
    factory.Credentials.UserName.Password = "<Enter password here>";  
    factory.Open();  
    
  6. 创建并打开通道。

    IRequestChannel channel = factory.CreateChannel();  
    channel.Open();  
    
  7. 创建并发送请求消息。

    XmlReader readerIn;  
    Console.WriteLine("Creating the message");  
    try  
    {  
       readerIn = XmlReader.Create("InsertRequest.xml");  
       Console.WriteLine("Reader created");  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    Message messageIn = Message.CreateMessage(MessageVersion.Default, "TableOp/Insert/dbo/Employee", readerIn);  
    Message messageOut = channel.Request(messageIn);  
    
    

    在创建请求消息时,您必须指定消息操作,该操作指示适配器在 SQL Server 表上执行的动作。 若要对 Employee 表执行插入操作,消息操作是 TableOp/Insert/dbo/Employee。 有关如何确定表上各种操作的消息行为的信息,请参阅“插入”、“更新”、“删除”和“选择操作”的表和视图的消息架构

  8. 获取响应消息。

    XmlReader readerOut = messageOut.GetReaderAtBodyContents();  
    XmlDocument doc = new XmlDocument();  
    doc.Load(readerOut);  
    doc.Save("C:\\Response.xml");  
    
  9. 关闭消息、通道和通道工厂。

    messageOut.Close();  
    channel.Close();  
    factory.Close();  
    
  10. 构建项目。 生成项目后,必须执行以下任务:

    • 将请求消息 InsertRequest.xml复制到与项目可执行文件相同的位置。 通常,此位置为项目目录下的 \bin\Debug\ 。

    • 示例中使用的“Employee”表包含一个列,该列使用用户定义的类型 Point(UDT)。 因此,在运行项目之前,必须创建点 UDT 的程序集,如 创建 User-Defined 类型中所述。 还必须在项目可执行文件所在的同一位置复制程序集 DLL 文件。 通常,此位置为项目目录下的 \bin\Debug\ 。

  11. 运行该应用程序。 响应消息 Response.xml保存在应用程序中指定的位置。 响应消息包含新添加的员工的 ID,如下所示:

    <InsertResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">  
      <InsertResult>  
        <long xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">10006</long>  
      </InsertResult>  
    </InsertResponse>  
    

    由于 Employee 表的 Employee_ID 列是标识列,因此插入操作返回新插入记录的标识列值。 如果表中没有标识列,则返回值为 NULL。

另请参阅

使用 WCF 通道模型开发 SQL 应用程序