使用 WCF 通道模型对 SQL 中的表运行插入操作

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

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

关于本主题中使用的示例

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

插入消息

若要使用 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 表执行 Insert 操作的说明。

创建用于将记录插入 Employee 表的 WCF 通道应用程序

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

  2. 在解决方案资源管理器中添加对 、Microsoft.ServiceModel.ChannelsSystem.ServiceModel和 的Microsoft.Adapters.SqlSystem.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 表执行 Insert 操作,消息操作为 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) 。 因此,在运行项目之前,必须创建 Point 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列作为标识列,因此 Insert 操作将返回新插入记录的标识列的值。 如果表中没有标识列,则返回值为 NULL。

另请参阅

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