将Excel中的修改数据导入数据库表

时间:2015-05-28 13:43:05

标签: c# sql import import-from-excel smartxls

我正在处理导入功能,我有一个包含一些数据的excel文件,稍后将由用户编辑,我设法通过C#中的SmartXLS导入excel并将所有数据更新为SQL但是,我所做的就是获取excel文件中的所有数据并将所有行更新到SQL表中,这会影响性能并且我还更新了未编辑的行。

我想问一下,有什么方法可以只修改Excel中的单元格,行并更新到SQL表中的相应数据?

var workbook = new WorkBook();
workbook.read(filePath);
var dataTable = workbook.ExportDataTable();

1 个答案:

答案 0 :(得分:1)

只是一个Scenarion,也许它可以帮助你理解gordatron和我在说什么:

以下情况: 表“产品”是产品信息的中心存储位置 和一个表“UpdatedProducts”,其结构看起来与“Products”表完全相同,但数据 也许不同。想想下面的情况:你在早上将产品表导出为ex​​cel。整体 您在Excel表格中删除,添加,更新产品的日期。在一天结束时,您想要重新导入您的Excel 数据到“产品”表。你需要什么:

  • 从“UpdatedProducts”
  • 中删除所有记录
  • 从excel插入数据 “UpdatedProducts”(如果可能,批量插入)
  • 更新“产品” 表

然后Merge-Statement可能如下所示:

MERGE Products AS TARGET
USING UpdatedProducts AS SOURCE 
    ON TARGET.ProductID = SOURCE.ProductID
WHEN MATCHED AND TARGET.ProductName <> SOURCE.ProductName OR TARGET.Rate <> SOURCE.Rate 
    THEN UPDATE SET TARGET.ProductName = SOURCE.ProductName, 
                    TARGET.Rate = SOURCE.Rate 
WHEN NOT MATCHED BY TARGET 
    THEN INSERT (ProductID, ProductName, Rate) 
        VALUES (SOURCE.ProductID, SOURCE.ProductName, SOURCE.Rate)
WHEN NOT MATCHED BY SOURCE 
    THEN DELETE

本声明的作用: 匹配时: 两个表中都存在数据,如果ProductName或Rate不同,我们更新“Products”中的数据

目标不匹配时: 数据存在于临时表中,但不存在于原始表中,我们将它们添加到“产品”

当不符合来源时: 数据存在于原始表中,但不存在于临时表中,您的数据将从“产品”中删除

非常感谢http://www.mssqltips.com/sqlservertip/1704/using-merge-in-sql-server-to-insert-update-and-delete-at-the-same-time/这个完美的例子!