【问题标题】:Read An Excel File With OLEDB?用 OLEDB 读取 Excel 文件?
【发布时间】:2012-02-10 12:52:30
【问题描述】:

您好,我正在使用 oledb 读取一个 excel 文件(该文件有 100000 行)。我必须快速阅读文件。

string conn;

                conn = ("Provider=Microsoft.ACE.OLEDB.12.0;" +
                ("Data Source=" + _filename + ";" +
                "Extended Properties=\"Excel 12.0;\""));
                OleDbConnection oleDBCon = new OleDbConnection(conn);
                oleDBCon.Open();
                DataTable dt = oleDBCon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                string excelsheetname = dt.Rows[0].ItemArray[2].ToString();
                string SSQL = "SELECT * from [" + excelsheetname + "]";

                OleDbDataAdapter oleDA = new OleDbDataAdapter(SSQL, conn);
                DataSet ds = new DataSet();
                oleDA.Fill(ds);
                DataTable _DtTable = ds.Tables[0]; // or [ ds ]
                oleDBCon.Close();

然后在带有 for 循环的 _DtTable 中,我将这些单元格插入到 DB 中。如何快速读取这个非常大的 excel?并插入数据库?我使用了 Parallel.For,但这对我来说不是真正的解决方案。有什么想法吗?

【问题讨论】:

    标签: c# sql-server excel oledb


    【解决方案1】:

    要使用 ADO 向 MyTable 添加记录,可以使用类似于以下的代码:

    'Create a new connection object for Book1.xls
    Dim conn As New ADODB.Connection
    conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=C:\Book1.xls;Extended Properties=Excel 8.0;"
    conn.Execute "Insert into MyTable (FirstName, LastName)" & _
      " values ('Bill', 'Brown')"
    conn.Execute "Insert into MyTable (FirstName, LastName)" & _
      " values ('Joe', 'Thomas')"
    conn.Close
    

    这是来自 MSDN:http://support.microsoft.com/kb/247412

    【讨论】:

    • 我可能没有仔细阅读。您希望从 excel 中读取并插入到另一个数据库中,也许是 SQL Server,而不是在 Excel 文件中插入记录。要读取 excel 文件,我更喜欢使用来自 exceldatareader.codeplex.com 的 ExcelDataReader
    • 谢谢!但在第一行它说“用 C# 编写的用于读取 Microsoft Excel 文件的轻量级和快速库('97-2007)。”我有 excel 03/07/10 文件。ExcelDataReader 是否支持 excel 2010 文件?
    【解决方案2】:

    利用SQL的OpenXML批量插入数据,为你做更多的工作

    这是我为相同工作所做的代码:Bulk Insertion of Data Using C# DataTable and SQL server OpenXML function

    【讨论】:

    • 这对插入有用吗?我不累吗?你确定你的代码比 Datatable 上的经典 for 循环性能更好吗(就像我写的一样)??
    【解决方案3】:

    您可以查看数据库可以使用 Excelfiles 的一些方式

    【讨论】:

      猜你喜欢
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多