【发布时间】:2012-05-10 05:10:07
【问题描述】:
我正在尝试在 C# 中创建一个小型控制台应用程序,以便根据 XML 文件的内容以最快的方式在 SQL Server 2008 中的产品表 (ITEMS) 上执行插入操作。我已经有一个 .XSD 文件,其中包含到 SQL 表的正确映射(对于下面概述的方法,这可能不是必需的)。
这是我的方法的高级:
- 读取 XML,使用它创建表。
- 使用从 XML 文件创建的表对 ITEMS 表执行 MERGE。
2a.如果该项目存在,请更新它。
2b。如果该项目不存在,则插入它。 - 创建仅包含插入 XML 的记录的日志。
考虑以下ITEMS表和XML文件:
物品
Item_Id Name Price
1 Coke 5.00
2 Pepsi 3.00
3 Sprite 2.00
ITEMS.XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<Item>
<Id>5</Id>
<Name>Mountain Dew</Name>
<Price>4.50</Price>
</Item>
<Item>
<Id>3</Id>
<Name>Sprite Zero</Name>
<Price>1.75</Price>
</Item>
导入后,ITEMS 表应如下所示:
物品
Item_Id Name Price
1 Coke 5.00
2 Pepsi 3.00
3 Sprite Zero 1.75
5 Mountain Dew 4.50
完成后,我还需要生成一个 XML 格式的日志文件,其中包含插入到表中的“新”记录 (ITEMS_LOG.XML):
ITEMS_LOG.XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<Item>
<Id>5</Id>
<Name>Mountain Dew</Name>
<Price>4.50</Price>
</Item>
我曾尝试使用 SQLXMLBulkLoad 实现此功能,但不幸的是,它不提供我需要的日志记录,也不允许我访问从 SQL Server 返回的任何消息(即插入/更新的内容)。尽管我有中级的 SQL 专业知识,但我对使用 XML 还是很陌生,尤其是在这种情况下。任何帮助/指导将不胜感激!
【问题讨论】:
-
你卡在哪里了?你能发一些你的代码吗?
-
您确定在 2 个不同的
items.xml文件中,如果一个产品与数据库中已有的 1 个重复(按名称/价格),它会具有相同的 ID? -
@ChrisW 不,它们不一定具有相同的 ID。有可能有两个不同 id 的同一个项目。
-
@Sam1 现在,我被困在如何将数据实际导入 SQL Server 中。我不知道我是否应该使用 XML 在 C# 中填充数据集,或者只是尝试将我的 C# 应用程序用作实际执行导入的 TSQL 命令的包装器。在这种情况下,速度非常重要。
-
@TelJanini:我将使用上述参数创建一个存储过程,并在代码中传递值。如果您在编码/存储过程方面需要帮助,请告诉我,我有一个示例..
标签: c# .net xml sql-server-2008 tsql