我的要求是在nop commerce 1.9中我必须在excel表中插入多个折扣,因为在执行此任务之前我需要清楚哪一个是最佳解决方案。
Which is the fastest way to upload the excelsheet having more than 100,000 lines of code in C#?
我读过这个问题并且回答发现SSIS
是一个选项。
实际上SSIS
最适合大型文件导入和导出选项。
如果我使用SSIS
包,我会得到什么其他好处?
答案 0 :(得分:3)
对于~100,000行,对于此类数据,性能不应该是一个重要问题。 SSIS可以做到这一点,但它不是唯一的选择。我认为有三种合理的方法可以做到这一点:
<强> SSIS:强> 这可以读取excel文件。如果您的电子表格表现良好(即可信任 如果要正确布局,那么SSIS可以加载内容。它有一些错误记录 功能,但在实践中,它只能有用地转储日志文件或写出错误 一个日志表。可以将错误的行指向保留表。
优点
<强>缺点:强>
BCP或BULK INSERT:
您可以将电子表格导出为CSV并使用BCP或BULK INSERT
语句加载文件。但是,这需要将文件导出为CSV并复制到数据库服务器上的驱动器或可访问的共享。
<强>优点:强>
<强>缺点:强>
SqlBulkCopy API: 如果您已经在使用.Net,则可以使用OLE自动化或ODBC从电子表格中读取,并使用SQL Server批量加载API加载数据。这需要您编写一个C#例程来进行导入。如果手动加载电子表格,则可以从用户的PC加载。
<强>赞成强>
缺点:
答案 1 :(得分:2)
SSIS是一个ETL工具。您可以进行转换,错误处理(如Kumar所述),SSIS中的查找,您可以重定向无效行,添加派生列等等。您甚至可以向其添加配置文件以更改某些属性/参数...
如何将数据加载到SQL有更多选项。 1,SSIS - 你需要设计工作流程(你需要BIDS或VS来设计和测试包) 2,如提到的“demas”,您可以将数据导出到平面文件并使用BCP / bulk insert 3,你可以在SQL上使用openrowset操作符(必须启用ad-hoc分布式查询才能使用此功能)然后你可以从SQL查询excel文件 - 这可能是如何读取数据的简单方法:
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=C:\test.xls', 'SELECT * FROM [Sheet1$]')
- try to look on google for OPENROWSET + EXCEL to get more examples. In this scenario you can query also text files, ACCESS ...
有很多方法可以做到,但这实际上取决于你想要达到的目标。在这种情况下,100K行真的不多。
答案 2 :(得分:1)
SSIS是一个很好的解决方案,但如果性能对您来说最重要,我会尝试将excel文件转换为纯文本文件并使用BULK INSERT functionality。
答案 3 :(得分:0)
错误记录 - 无效行可以轻松登录到单独的表中以进行进一步验证。
答案 4 :(得分:0)
如果您需要执行复杂的转换和所需的值检查,并且文件非常大(Excel文件中的100,000行很小),SSIS可能是最佳解决方案。它是一个非常强大,复杂的工具。
然而,这是一个很大的问题,SSIS很难有效地学习和工作,很难调试。我作为全职工作进口和出口,我花了一年多的时间来熟悉SSIS。 (当然我对数据的处理非常复杂而且根本不是那么简单,所以如果你没有进行任何复杂的转换,那么设置并不是那么糟糕,但是它远不如DTS那么简单,因为它具有更多可用的功能。如果您正在进行没有转换的简单导入,我相信其他方法可能更有效。
就性能而言,SSIS可以发光(它可以将数百万或更多的记录移动到速度至关重要的数据仓库),或者根据它的设置方式成为真正的狗。到达能够调整这些软件包之一的位置需要很高的技巧。