是否可以将 XML 文件中的数据导入 SQL 数据库,如果可以,该怎么做。我有一个包含大约 50 000 个条目的 XML 文件,我必须制作一个可以操作该数据(主要是读取和比较)的应用程序 - 所以我担心的是使用这么多数据的操作(并且很有可能将来会有更多)将非常缓慢且效率低下。如果有其他你认为更好的选择,请指教。谢谢
6 回答
您可以使用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 导入/导出向导
尝试查看来自 microsoft Sql Server 集成服务的 SSIS 工具
http://msdn.microsoft.com/en-us/library/ms141026.aspx
使用此工具,您可以使用过滤和自定义选择创建保存和运行导入包。可能您可以将其用作解决问题的整体解决方案。
诸如 Snaplogic 之类的产品具有“快照”,意思是连接器可以读取 xml 文件,对其进行解析,然后将其移动到数据库中,而无需编写任何代码行。看看Snaplogic。
在这种情况下,我需要从 xml 文件中读取数据并将该 xml 文件作为参数发送到存储过程有用的链接 http://www.aspdotnet-suresh.com/2012/12/aspnet-send-xml-file-as-parameter -to.html
另一个需要考虑的选择是:
给定以下 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 server 端。
它在很大程度上取决于 xml 文件的复杂性(对象的一个深度与嵌套对象、数据的种类和大小等)。
如果您有知识,SSIS 可以成为一个解决方案,一个简单的 c# 应用程序也可以完成这项工作。
申请应:
- 定义一个表示您的数据的持久性不可知类
- 阅读 xml 以加载此类的列表(在非常大的卷上可能需要分页
- 使用 ado 或 linq to sql 将数据推送到数据库(实体框架是可能的,但对于简单的批量导入来说可能太多了
另一种方法也可以使用执行相同工作的简单 powershell 脚本。