从XML文件导入数据到SQL数据库

5
有可能将XML文件中的数据导入SQL数据库,如果可以的话,应该如何操作呢?我有一个包含大约50,000条记录的XML文件,并且需要编写一个应用程序来操作这些数据(主要是读取和比较) - 所以我的担心是,操作如此大量的数据(而且未来很可能会更多),效率会非常低下。如果您认为还有其他更好的选择,请给予建议。谢谢。

为什么不在数据库中进行操作呢?使用 Linq to XML 您可以读取 XML 文件,然后将其存储到集合中,并将其作为 xml 输入发送到存储过程,在其中进行所有操作。 - praveen
你可以使用XPathNavigator对象来解析XML,然后使用一个SqlCommand对象将数据插入到表格中。在互联网上有很多关于这两个对象的代码示例。 - eMi
如果您正在使用任何MS BI工具,那么您可能会考虑使用SSIS从XML加载数据,进行操作,然后将数据转储到SQL Server中。 - praveen
6个回答

5
你可以使用SQL Server导入和导出向导。你也可以查看SQL Server Integration Services。如果你想使用C#,那么SQL Server支持XML数据类型。你可以利用它。
你也可以尝试在数据集中读取数据,然后使用BulkInsert将数据插入到SQL Server中。
DataSet reportData = new DataSet();
reportData.ReadXml(Server.MapPath("yourfile.xml"));
SqlConnection connection = new SqlConnection("DB ConnectionSTring");
SqlBulkCopy sbc = new SqlBulkCopy(connection);
sbc.DestinationTableName = "yourXMLTable";

编辑: 对于 SQL Server 2005,请查看SQL Server 2005 导入/导出向导


是的,我正在使用C#。我需要哪个SQL服务器?我已经在我的电脑上安装了SQL Server 2005,但我找不到你给我的链接中列出的工具(导入和导出向导)。我只有配置工具。 - NDraskovic
@NDraskovic 请查看此链接http://msdn.microsoft.com/en-us/sqlserver/bb671393.aspx,另外请看看是否能找到DTS或数据转换服务。 - Habib
@NDraskovic,请查看 http://www.databasejournal.com/features/mssql/article.php/3580216/SQL-Server-2005-Import--Export-Wizard.htm。我还更新了我的回答。 - Habib
好的,我会看看能做什么。谢谢你的回答。 - NDraskovic

2

有一些产品,例如Snaplogic,它们具有“snaps”,这意味着连接器可以读取XML文件,解析它,然后将其移动到数据库中,而无需编写任何代码。请访问Snaplogic


2

1

1
另一个要考虑的选项是:
给定以下xml
<?xml version="1.0" standalone="yes" ?>
<Clients>
  <Client>
    <Id>1</Id>
    <FirstName>FirstName1</FirstName>
    <LastName>LastName1</LastName>
  </Client>
  <Client>
    <Id>2</Id>
    <FirstName>FirstName2</FirstName>
    <LastName>LastName2</LastName>
  </Client>
</Clients>

您可以使用以下查询来选择内容。
select 
    x.a.query('Id').value('.', 'int') as Id
    , x.a.query('FirstName').value('.', 'nvarchar(50)') as FirstName
    , x.a.query('LastName').value('.', 'nvarchar(50)') as LastName  
from 
( 
    select CAST(x AS XML) from OPENROWSET
    (BULK 'C:\Users\jmelosegui\Desktop\Clients.xml', SINGLE_BLOB) as T(x)
) T(x)
cross Apply x.nodes('Clients/Client') as x(a)

完成这一步骤后,您可以加入其他表格或在插入数据后进行匹配,所有操作都在SQL服务器端进行。


0

这在很大程度上取决于XML文件的复杂性(对象的一层深度与嵌套对象,数据的种类和大小等)。

虽然如果您有相关知识,SSIS可以是一个解决方案,但一个简单的C#应用程序也可以胜任此工作。

该应用程序应该:

  1. 定义一个表示您的数据的持久性不可知类
  2. 读取XML以加载此类的列表(对于非常大的数据量可能需要分页)
  3. 使用ADO或LINQ to SQL将数据推送到数据库中(实体框架可能过于复杂,不适合简单的批量导入)

另一种替代方法也可以使用一个简单的PowerShell脚本来执行相同类型的工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接