通过C#使Excel数据导入数据库

通过C#使Excel数据导入数据库,需要用到微软Office的驱动引擎,这个有两个可供选择:

Microsoft.Jet.OLEDB.4.0(以下简称 Jet 引擎)和Microsoft.ACE.OLEDB.12.0(以下简称 ACE 引擎)。

Jet 引擎大家都很熟悉,可以访问 Office 97-2003,但不能访问 Office 2007。
ACE 引擎是随 Office 2007 一起发布的数据库连接组件,既可以访问 Office 2007,也可以访问 Office 97-2003。
另外:Microsoft.ACE.OLEDB.12.0 可以访问正在打开的 Excel 文件,而 Microsoft.Jet.OLEDB.4.0 是不可以的。

下面给出一个C#实例:

        private void TransferData(string excelFileName, string sheetName, string connectionString)
        {
            DataSet ds 
= new DataSet();
            string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + excelFileName + ";" + "Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
            OleDbConnection conn 
= new OleDbConnection(strConn);
            
try
            {
                conn.Open();
                
string strExcel = string.Format("select * from [{0}$]", sheetName);
                OleDbDataAdapter da 
= new OleDbDataAdapter(strExcel, conn);
                da.Fill(ds, sheetName);
                
//用bcp导入数据
                using (SqlBulkCopy bcp = new SqlBulkCopy(connectionString))
                {
                    bcp.SqlRowsCopied 
+= new SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
                    bcp.BatchSize 
= 100;//每次传输的行数
                    bcp.NotifyAfter = 100;//每次提示的行数
                    bcp.DestinationTableName = sheetName;//目标表
                    bcp.WriteToServer(ds.Tables[0]);
                }
            }
            
catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            
finally
            {
                conn.Close();
            }
        }
        
//进度显示
        void bcp_SqlRowsCopied(object sender, SqlRowsCopiedEventArgs e)
        {
            
this.Text = e.RowsCopied.ToString();
            
this.Update();
        }
        
private void button1_Click(object sender, EventArgs e)
        {
            string connString = "server=.\\SQLEXPRESS;database=db_test;uid=sa;pwd=123456";
            TransferData(
"d:\\test1.xlsx""Sheet1", connString);
        }

 

最后,对于两个参数的解释,

参数HDR的值:
HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES

IMEX ( IMport EXport mode )设置
当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。
当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。
当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。

posted on 2011-06-24 14:29  Lemon_s  阅读(571)  评论(0编辑  收藏  举报

导航