65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 OpenXML 和 ADO.NET 将数据插入 SQL 2000

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.59/5 (9投票s)

2003年7月2日

2分钟阅读

viewsIcon

145275

downloadIcon

3445

使用 OpenXML + ADO.NET 将数据插入 SQL Server 的一个例子

引言

Microsoft SQL Server 2000 有一个“OpenXML”功能,通过该功能我们可以通过调用存储过程并传递一个 XML 字符串来更新表。通过这种方法,我们可以通过与数据库建立单个连接来将一组行插入表中,这减少了网络流量,并且比传统的逐行调用插入命令或创建一个包含每行分隔符、每列分隔符的字符串,然后以编程方式循环遍历该字符串并检索每一行并插入数据库的方式具有更好的性能。

下面显示了使用 ADO.NET 调用存储过程并将 xml 字符串作为参数传递给该过程的方法

1) string strXML = "<root><publisher><pub_id>9986</pub_id><pub_name>vijay</pub_name>
        <city>Dallas</city><state>LA</state><country>USA</country></publisher></root>";
2) SqlConnection sCn = 
        new SqlConnection("server=localhost;uid=sa;pwd=;database=pubs");
3) sCn.Open();
4) SqlCommand  sCmd = new SqlCommand("MyInsertSP",sCn);
5) sCmd.CommandType = CommandType.StoredProcedure;
6) sCmd.Parameters.Add(@strXML",SqlDbType.VarChar,1000).Value=strXML;
7) sCmd.ExecuteNonQuery();
  1. 创建包含要插入数据库的数据的 XML 字符串。
  2. 创建 Connection 对象。
  3. 打开与数据源的连接。
  4. 创建 command 对象(传递存储过程名称和连接对象)。
  5. 将命令类型设置为存储过程。
  6. 为存储过程设置参数并分配 XML。
  7. ExecuteNonQuery 用于执行 Insert/Update/Delete,它不返回任何行。

下面给出了处理数据插入的 SQL 存储过程

1) Create PROCEDURE dbo.MyInsertSP
2) (
3)         @strXML varchar(1000) 
4) )
5) AS
6) Begin
7)    Insert into publishers
8)    Select     * from OpenXml(@intPointer,'/root/publisher',2)
9)    With     (pub_id char(4), pub_name varchar(40), city varchar(20), 
                  state char(2),9) country varchar(20))
10)    exec sp_xml_removedocument @intPointer
11)RETURN
12)End
  1. 声明一个句柄,它将保存指向 XML 文档的指针。
  2. 创建用于在 SQL Server 内存中保存 XML 文档的句柄。
  3. 打开 XML 文档并插入数据库,这里 OpenXML 接受 3 个参数
    • 我们在内存中为 XML 文档创建的句柄,
    • 用于访问 XML 文档各种元素的 XPath,
    • 一个标志——这里 2 表示将 XPath 作为元素访问,

如果我们的 XML 类似于以下内容,我们还可以使用 XPath 作为属性访问 XML 文档

 <root><publisher pub_id='9987' pub_name='vijay'></publisher></root>
  1. 从 SQL Server 内存中删除 Xml 文档。

摘要

OPENXML 是 SQL Server 2000 中添加的一个新函数。它提供了一个 XML 文档的行集视图。OPENXML 是一个功能,通过该功能可以将 XML 文档用于类似于关系数据库的格式。它允许将 XML 文档传递给 T-SQL 存储过程,用于更新表。

© . All rights reserved.