winfrom 導入Excel表到access數據庫(來自小抽獎系統)

網上有不少這種方法,本人只是針對本身的系統來實現的sql

 //導入excel表
        private void ImportTSMenu_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFD = new OpenFileDialog();
            openFD.Filter = "Excel文件|*.xls";
            if (openFD.ShowDialog(this.Owner) == DialogResult.OK)
            {
                string strFilename = openFD.FileName;
                if (!File.Exists(strFilename))
                {
                    MessageBox.Show("文件不存在,請從新選擇文件!");
                    return;
                }
                //string strConn = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + strFilename + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
                string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strFilename + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'";
                //關於OleDB鏈接Excel的Extended Properties(擴展屬性)HDR=YES; IMEX=2
                //HDR=Yes,這表明第一行是標題,不作爲數據使用 ,若是用HDR=NO,則表示第一行不是標題,作爲數據來使用。系統默認的是YES
                //參數Excel 8.0 對於Excel 97以上到2003版本都用Excel 8.0,2007或2010的都用Extended Properties=Excel 12.0
                //IMEX 有三種模式:
                //當 IMEX=0 時爲「匯出模式」,這個模式開啓的 Excel 檔案只能用來作「寫入」用途。
                //當 IMEX=1 時爲「匯入模式」,這個模式開啓的 Excel 檔案只能用來作「讀取」用途。
                //當 IMEX=2 時爲「連結模式」,這個模式開啓的 Excel 檔案可同時支援「讀取」與「寫入」用途。
                OleDbDataAdapter oldAda = new OleDbDataAdapter("select * from [Sheet1$]", strConn);
                DataSet ds = new DataSet();
                oldAda.Fill(ds);                    //C#導入execl 找不到可安裝的 ISAM,若是是Office2003版本
                //string strConn = "Provider=Microsoft.Jet.Oledb.4.0; Data Source=" + excelFile + ";Extended Properties=‘Excel 8.0; HDR=YES; IMEX=1’";
                //若是是2007以上
                //string strCon = "Provider=Microsoft.ACE.OLEDB.12.0;data source=" + filePath + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'";
                DataTable dt = ds.Tables[0];
                InsertData(dt);
                //this.FTLucky_Load(sender, e);
                GetData();
            }
        }
View Code

下面有for循環一條條插入到數據庫可能效率不高,應該有批量導入的,好像sql是用SqlBulkCopy,至於access的話,因爲時間緊,且要求不高,就暫時用for代替了數據庫

 #region 三、將excel數據插入到數據庫
        /// <summary>
        /// 將DataTable的數據插入到數據庫
        /// </summary>
        /// <param name="dt">excel數據</param>
        private void InsertData(DataTable dt)
        {
            try
            {
                oledCon = sqlHelper.OledCon();
                oledCon.Open();
                string strInsert = "";
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    strInsert = "insert into Information([UserName],[Phone])  values('" + dt.Rows[i][0] + "','" + dt.Rows[i][1] + "')";
                    oledCmd = new OleDbCommand(strInsert, oledCon);
                    oledCmd.ExecuteNonQuery();
                }
                MessageBox.Show("導入成功!");
            }
            catch (Exception ex)
            {
                MessageBox.Show("導入出錯,緣由:" + ex.Message.ToString());
            }
            finally
            {
                oledCon.Dispose();
                oledCon.Close();
            }
        } 
        #endregion
View Code
相關文章
相關標籤/搜索