我正在使用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
答案 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