2009-09-29 63 views
1

我使用C#.NET 1.1和SQL Server 2000 ....检索XML文件中的数据,并插入到数据库表

我想从XML文件retrive数据和数据存储到数据库表。

XML文件:

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

我DATABSE表

id int, 
name varchar(100), 
age int 
+0

你能在代码视图中发布XML,以便我们可以看到标签和内容吗? – 2009-09-29 05:29:10

+0

@maxy:您需要突出显示您的XML和SQL结构,然后单击编辑控件工具栏上的“代码”按钮(010 101)以使其显示出来,以便读者可以正确地看到它! – 2009-09-29 05:36:29

回答

3

第一关 - 你的XML是无效的:

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

这不是一个有效的XML结构 - 又该它是?

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

一个“ID”元素的值在里面吗? <data><id>1</id>

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

  • 创建一个XML模式,所以你可以反序列化这个XML转换为.NET对象 - 如果你有吨效果最好这些文件的导入

  • 使用LINQ到XML如果你在.NET 3.5和高达

  • 使用传统的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语句 - 完全取决于你。一旦你有了三位信息(身份证,姓名,年龄),你可以用你喜欢的任何方式做。

也有警告字:这包括没有错误检查什么!如果一个<data>节点应该不完整或者一个子节点的名称错误,这将会崩溃 - 您还需要提供一些错误检查! (为了简化,不)

马克

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 
相关问题