有可能将XML文件中的数据导入SQL数据库,如果可以的话,应该如何操作呢?我有一个包含大约50,000条记录的XML文件,并且需要编写一个应用程序来操作这些数据(主要是读取和比较) - 所以我的担心是,操作如此大量的数据(而且未来很可能会更多),效率会非常低下。如果您认为还有其他更好的选择,请给予建议。谢谢。
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 导入/导出向导
有一些产品,例如Snaplogic,它们具有“snaps”,这意味着连接器可以读取XML文件,解析它,然后将其移动到数据库中,而无需编写任何代码。请访问Snaplogic。
我遇到了这样的需求:从xml文件中读取数据并将该xml文件作为参数发送到存储过程。 有用的链接 http://www.aspdotnet-suresh.com/2012/12/aspnet-send-xml-file-as-parameter-to.html
<?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服务器端进行。
这在很大程度上取决于XML文件的复杂性(对象的一层深度与嵌套对象,数据的种类和大小等)。
虽然如果您有相关知识,SSIS可以是一个解决方案,但一个简单的C#应用程序也可以胜任此工作。
该应用程序应该:
另一种替代方法也可以使用一个简单的PowerShell脚本来执行相同类型的工作。