翔如菲菲

其实天很蓝,阴云总会散;其实海不宽,此岸连彼岸.

导航

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-10-19 04:51  翔如飞飞  阅读(505)  评论(0)    收藏  举报