好的,我已经写了一个Excel导入。它使用excel自动化来完成所有记录并完成工作。如果你不得不这样做,你会怎么做?
你会使用SSIS吗? 你会使用Dataconnection吗? 对于正确完成这项工作的最佳方法,我感到非常困惑。因此,当一个客户端执行导入时,它不会减慢其他客户端的实际应用程序。 感谢
答案 0 :(得分:1)
我过去使用的方法是使用OleDb读取Excel电子表格数据。本文有基础知识:
http://www.davidhayden.com/blog/dave/archive/2006/05/26/2973.aspx
这避免了必须使用自动化,并证明是非常有效的。
答案 1 :(得分:1)
这取决于很多事情。我参与了两个相当大的项目,这些项目以两种截然不同的方式从Excel导入数据,并且它们采用了完全不同的方法。
这个项目涉及每天将数百个文件用定义良好的数据格式压入临时数据库,然后对该数据执行一些ETL以将其带入数据仓库(和然后是数据集市和立方体等。)
为什么我们选择SSIS:
这个项目采用了一个现有的电子表格,该电子表格已经被用来计算一堆财务指标,包括一个可以根据各种电子表格定义的假设运行多个场景组合的宏,并将其全部插入到SQL Server中数据库(它进行了类似的DW - > DM - >多维数据集旅程)。
为什么我们选择VSTO:
这两种方法同样有效,但有多种理由可供选择。最大的一个是从Excel中提取数据的格式/结构的灵活性。如果它的定义非常明确且严格,SSIS是一种简单且低用户干扰的方法。但是,如果他们需要进行大量更改,那么可能需要使用Office Interop平台(VSTO)。
答案 2 :(得分:0)
这实际上取决于要求 - 是将遗留数据单次导入新系统,是否定期使用,数据量是多少,是否有可重用的数据访问和业务逻辑层目标数据库是已经采用Open XML格式的excel文件,因此可以使用Open XML SDK,...
但是对于大范围的情况,我只使用OLE DB连接从Excel文档和现有数据访问和业务逻辑层读取以写入目标数据库。
答案 3 :(得分:0)
您可以使用ADO.NET直接将Excel读入您的程序。请查看以下代码 -
string fileName = "c:\myFileName.xls";
string connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;
data source={0}; Extended Properties=Excel 8.0;", fileName);
// Create the data adapter pointing to the spreadsheet
var oa = new OleDbDataAdapter("SELECT * FROM [myWorkSheetName$]",
connectionString);
// Create a blank data set
var ds = new DataSet();
// Fill the data set using the adapter
oa.Fill(ds, "anything");
// Create a data table from the data set
DataTable dt = ds.Tables["anything"];
然后,您可以根据需要操作数据表中的数据。
答案 4 :(得分:0)
我会将Excel电子表格读取到带有第三方组件的数据表中。我不建议使用OLEDB和Excel提供程序,因为我有很多使用它们的Unicode问题。然后我将使用System.Data.SqlClient.SqlBulkCopy映射数据并批量/插入数据库。
如果您知道导入到的表只是由您的应用程序访问/锁定,您可以配置SqlBulkCopy来执行表锁定,这将显着提高性能;在我的情况下,最多12-15倍!