从xml文件中检索数据并插入到数据库表中

时间:2009-09-29 05:24:07

标签: c# xml sql-server-2000

我正在使用c#.net 1.1和SQL Server 2000 ....

我想从xml文件中检索数据并将该数据存储到数据库表中。

XML文件:

<information>
  <data>
    <id="1"></id>
    <name>peter</name>
    <age>25</age>
  </data>
</information>

我的数据库表是

id int,
name varchar(100),
age int

2 个答案:

答案 0 :(得分:3)

首先关闭 - 您的XML无效:

<data>
    <id="1"></id>

这不是一个有效的XML构造 - 应该是什么?

数据节点上的“ID”属性? <data id="1">

内部带有值的“ID”元素? <data><id>1</id>

有很多方法可以做到这一点 - 完全取决于你的情况:

  • 创建XML架构,以便将此XML反序列化为.NET对象 - 如果要导入大量这些文件,则效果最佳

  • 如果您使用的是.NET 3.5及更高版本,请使用Linq-to-XML

  • 使用传统的XML文档处理

如果使用传统的XML文档处理,如果文件相对较小(因为它将整个文件加载到内存中),这种方法效果最好。在这种情况下,您可以执行以下操作:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("yourfilename.xml");

XmlNodeList dataNodes = xmlDoc.SelectNodes("/information/data");

foreach(XmlNode node in dataNodes)
{
    int id = Convert.ToInt32(node.SelectSingleNode("id").InnerText);
    string name = node.SelectSingleNode("name").InnerText;
    int age = Convert.ToInt32(node.SelectSingleNode("age").InnerText);

    // insert into database, e.g. using SqlCommand or whatever
}

至于插入数据库 - 您可以使用SqlCommand中的存储过程或SQL语句 - 完全取决于您。一旦你掌握了三位信息(id,name,age),就可以随心所欲地使用这些信息。

警告语:这包括无错误检查!如果<data>节点不完整或子节点名称错误,则会崩溃 - 您还需要提供一些错误检查! (为简单起见而遗漏)

马克

答案 1 :(得分:2)

当XML文件对SQL Server服务可见时,这可以使用普通的旧T-SQL,只需将其调整即可插入到表中。

DECLARE @DOC INT
DECLARE @XML VARCHAR(MAX) 

-- Dump entire file into variable
SET @XML =
( 
    select BulkColumn from openrowset 
        (BULK N'<your filename>'
            , single_clob) as RuleFile
)

-- Prep doc
EXECUTE sp_xml_preparedocument @DOC OUTPUT, @XML

-- Return data
SELECT * 
    FROM OpenXML(@DOC, '<your xpath>', 2) 
    WITH <your table>

-- Clean up
EXECUTE sp_xml_removedocument @DOC