Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将xml数据转换为sql server数据库最合适的方法是什么_C#_Sql Server_Xml_.net 4.0 - Fatal编程技术网

C# 将xml数据转换为sql server数据库最合适的方法是什么

C# 将xml数据转换为sql server数据库最合适的方法是什么,c#,sql-server,xml,.net-4.0,C#,Sql Server,Xml,.net 4.0,我正在寻找一些可能的选择,以便从xml文件高效地填充关系SQL Server数据库。所以基本上我设想了一个三步的过程来完成它 从公共url读取XML 填充类似于xml模式的sql数据库 填充目标关系sql数据库 我不确定直接将xml映射到目标数据库是否容易实现,即跳过步骤2,但我倾向于这会使过程有点复杂 从公共url读取xml的部分类似于www.abc.com/xmlfeed.xml,这需要一个夜间例程来处理此文件。像windows任务调度之类的东西..或者更好的方法 我只有两天的时间来完成这项

我正在寻找一些可能的选择,以便从xml文件高效地填充关系SQL Server数据库。所以基本上我设想了一个三步的过程来完成它

  • 从公共url读取XML
  • 填充类似于xml模式的sql数据库
  • 填充目标关系sql数据库 我不确定直接将xml映射到目标数据库是否容易实现,即跳过步骤2,但我倾向于这会使过程有点复杂

    从公共url读取xml的部分类似于www.abc.com/xmlfeed.xml,这需要一个夜间例程来处理此文件。像windows任务调度之类的东西..或者更好的方法

    我只有两天的时间来完成这项工作,所以我更喜欢任何能够快速实现且编码工作量更少的东西。但是,我确实需要这个方法在将来可以维护,因为我每天都会用相同的旧模式接收新的xml数据。如果模式有一点变化,我希望调整例程的过程没有麻烦


    我原以为将遗留数据迁移到SQL Server需要几分钟的时间,因为这样的需求非常频繁,但令我惊讶的是,互联网上几乎没有对不同的xml迁移技术进行讨论/比较。我真的很困惑,不知道该走哪条路,一个纯粹的SQL Server解决方案,如SSIS或类似xml解析器的东西

    当我通读你的文章时,我的第一个想法是SSIS,最后是你自己写的。特别是如果你熟悉它,我推荐它。您可以在两天内实现这样的解决方案

    在实现ETL过程之后,您可以创建一个SQL Server代理作业,该作业将安排SSIS包在您希望它运行的时间运行。它支持从SQL Server或文件系统运行包

    编辑 根据你的例子。完全有可能在SSIS中实现这样的解决方案。我给出了一个处理XML结构的示例项目的屏幕截图

  • 第一幅图显示SSIS包由3个控制流步骤组成。它们中的每一个都是一个数据流任务。它首先处理制造商,然后是模型,然后是汽车

  • 我只实现了制造商部分。如图2和图3所示。(它们有一点重叠。)在#2中,我阅读了XML内容(XML源任务),按制造商对其进行聚合(聚合任务)。然后我也按制造商名称对它们进行排序(排序任务)。另一方面,我阅读了SQL数据库中现有的制造商(通过OLEDB源任务),然后也将对其进行排序

  • 之后,通过连接操作(类似于SQL中的操作)合并这两个源(合并连接任务)。在这种情况下,这是一个完整的外部联接,因此您可以确定哪个制造商是新的,哪个应该删除。我根据前两个条件(新建、删除)将记录分为两部分

  • 最后,我通过OLEDB目标任务添加新的制造商,并通过OLEDB命令任务删除缺少的制造商。在后一种情况下,我假设SQL中有一个存储过程(称为DeleteManufacturer(@ManufacturerName)),它将删除制造商以及所有附加的模型和汽车。(逐级删除)

  • 其他两个数据流任务应以相同的方式实现。如果您应该升级匹配的记录,那么条件拆分任务必须有三个条件,并在第三个条件后附加一个新的树簇。这里,一个新的OLEDB命令可以与UPDATE语句一起使用


    如前所述,如果您已经准备好了包,应该创建一个SQLServer代理作业,它将在晚上(或者在您希望的时候)运行您的包。

    因为我是SSIS的新手,所以我可能需要考虑学习曲线。有没有办法将xml直接映射到目标关系数据库?我的意思是跳过步骤2来填充中间数据库。我需要为它写任何查询吗?如果您能给我指一些资源来解释整个过程,那就太好了。您能提供关于XML和目标数据库模式之间差异的信息吗?(不是全部,只是关于为什么您认为需要Intermiade DB的一点摘录。)SSIS中有一些工具可以根据您的喜好转换XML。如果你能提供更多的信息,我可以帮你。比如说feed像number=“2”凯美瑞丰田number=“3”雅阁本田number=“4”思域本田说目标数据库有表制造商、车型、汽车。我需要先填写制造商表,以便将其作为国外关键车型,最后是将参考该车型的汽车。此外,可能还有其他事情,比如用汽车id填写每辆车的图像表等等。这将是多么容易啊,因为我每天都会得到提要,用新车更新数据库,删除xml提要中没有的车,或者更新它们(如果它们已经存在)。非常详细的解释!。虽然只是因为我害怕这个小小的学习曲线,我没有选择SSIS路线。但这看起来确实是一种将xml数据迁移到sql server的非常干净和简单的方法。不过,我确实在两天内完成了迁移,而没有xml解析的麻烦。我使用.NETDataSet读取xml并将数据转储到相同的数据库结构中。在第二步中,我使用普通sql查询实现了将业务逻辑映射到目标关系数据库。虽然我不推荐它,特别是在SSIS之类的东西之后,但它确实起到了作用。