将excel文件的数据写入数据库,什么方法效率最高?
我现在的方法是将excel文件填充到dataset,然后现在怎么将dataset写入到数据库表中呢?
由于excel的每一条数据要分开写入数据库的3个表中,所以我写了一个带参数的存储过程,参数对应excel文件的列。下面是将excel文件填充进dataset的代码:
/// <summary>
        /// 返回Excel数据源
        /// </summary>
        /// <param name="filename">文件路径</param>
        /// <returns></returns>
        private DataSet ExcelToDataSet(string filePath)
        {
            DataSet ds = null;
            OleDbConnection conn = null;            try
            {
                string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                                "Extended Properties=Excel 8.0;" +
                                "data source=" + filePath;
                conn = new OleDbConnection(connStr);
                string sqlStr = " SELECT * FROM [Sheet1$]";
                conn.Open();
                OleDbDataAdapter da = new OleDbDataAdapter(sqlStr, conn); 
                ds = new DataSet();
                da.Fill(ds, "Table_Excel");
            }
            catch (Exception excpt)
            {
                ds = null;
            }
            finally
            {
                if (conn != null)
                {
                    conn.Close();
                    conn.Dispose();
                }
            }
            return ds;
        }

解决方案 »

  1.   

    楼主这个就是最高效的。
    我以前做项目最终用的就是这个。up&=高人
      

  2.   

    由于excel的每一条数据要分开写入数据库的3个表中,所以我写了一个带参数的存储过程,参数对应excel文件的列。
    那我现在怎么将dataset写入到数据库表中呢?是应该读一行然后写一行吗?
    还有一个问题,怎么得到excel文件的所有sheet?网上说:“引用Excel类库:using Microsoft.Office.Interop.Excel类库”,我添加引用找了半天都没有找到。
      

  3.   

    谢谢!高手帮我看看上面的问题。““由于excel的每一条数据要分开写入数据库的3个表中,所以我写了一个带参数的存储过程,参数对应excel文件的列。 
    那我现在怎么将dataset写入到数据库表中呢?是应该读一行然后写一行吗? 
    还有一个问题,怎么得到excel文件的所有sheet?网上说:“引用Excel类库:using Microsoft.Office.Interop.Excel类库”,我添加引用找了半天都没有找到。
    ””
      

  4.   

    using Microsoft.Office.Interop.Excel
    安装Office时要选中.NET编程*****忘记叫什么名字了,反正完全安装Office肯定有。
    但我认为用OLEDB的方式也不错。
      

  5.   

    你先检查一下你的office是不是装完整了?装完整的话肯定有的,我的就有using Microsoft.Office.Interop.Excel类库呢……
      

  6.   

    引用解决了,先添加com组件mirosoft excel 12.0 object library。现在还有一个问题怎么解决:“由于excel的每一条数据要分开写入数据库的3个表中,所以我写了一个带参数的存储过程,参数对应excel文件的列。 
    那我现在怎么将dataset写入到数据库表中呢?是应该读一行然后写一行吗? ”
    谢谢各位!
      

  7.   

    兄弟有什么高招?
    还有一个问题,一个excel文件里可能会有多个sheet,怎么样获取这些sheet的名字。
      

  8.   

      Excel.Application excel = new Excel.ApplicationClass();
                    Excel._Workbook xBk = excel.Workbooks.Add(true);
                    Excel._Worksheet xSt = (Excel._Worksheet)xBk.Sheets[1]
                    "xSt.Name"就是第一个 sheet的名字