1. 程式人生 > >Excel批量匯入到資料庫

Excel批量匯入到資料庫

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.OleDb;
using System.Data;
 
protected void Import()
    {
        try
        {
            string fileurl = Request.Form["homepath"].ToString();//用kindeditor編輯器上傳excel檔案
            DataTable dt = GetDataFromExcelWithAppointSheetName(fileurl);
            bool issuccess = false;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                int userid = int.Parse(dt.Rows[i][0].ToString());
                int reserveid = int.Parse(dt.Rows[i][1].ToString());
                int typeid = int.Parse(dt.Rows[i][2].ToString());
                int quantity = int.Parse(dt.Rows[i][3].ToString());
                string name = dt.Rows[i][4].ToString();
                int sex = int.Parse(dt.Rows[i][5].ToString());
                string moblie = dt.Rows[i][6].ToString();
                DateTime time = DateTime.Parse(dt.Rows[i][7].ToString());
                int number = int.Parse(dt.Rows[i][8].ToString());
                string verifycode =dt.Rows[i][9].ToString();
                string str = dt.Rows[i][10].ToString();
                string note1 = dt.Rows[i][11].ToString();
                string note2 = dt.Rows[i][12].ToString();
                string note3 = dt.Rows[i][13].ToString();
                string note4 = dt.Rows[i][14].ToString();
                int verify = int.Parse(dt.Rows[i][15].ToString());
                int state = int.Parse(dt.Rows[i][16].ToString());
                DateTime jointime = DateTime.Parse(dt.Rows[i][17].ToString());
                codeQuery hq = new codeQuery();
                //迴圈新增到
                issuccess = hq.saveAddRes(userid, reserveid, typeid, Convert.ToInt32(quantity), name, Convert.ToInt32(sex), moblie, time, Convert.ToInt32(number), verifycode, str, note1, note2, note3, note4, verify, state, jointime);
            }
            if (issuccess)
            {
                adminBasic.setMsg("成功", "匯入成功", "adm_reserve.aspx?sortid=" + ab.sortid + "&page=" + ab.pages);
            }
        }
        catch (Exception e)
        {
            adminBasic.setMsg("失敗", "匯入失敗", "adm_reserve.aspx?sortid=" + ab.sortid + "&page=" + ab.pages);
        }
    }

    /// <summary>
    /// 根據excel的檔案的路徑提取其中表的資料
    /// </summary>
    /// <param name="Path">Excel檔案的路徑</param>
    private DataTable GetDataFromExcelWithAppointSheetName(string Path)
    {
        //連線串
        string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + System.Web.HttpContext.Current.Server.MapPath(Path) + ";" + "Extended Properties=Excel 8.0;";
        //string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + System.Web.HttpContext.Current.Server.MapPath(Path) + ";Extended Properties='Excel 8.0; HDR=Yes; IMEX=1'"; //此連線只能操作Excel2007之前(.xls)檔案
        //string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + System.Web.HttpContext.Current.Server.MapPath(Path) + ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'"; //此連線可以操作.xls與.xlsx檔案 (支援Excel2003 和 Excel2007 的連線字串)
        //備註: "HDR=yes;"是說Excel檔案的第一行是列名而不是資料,"HDR=No;"正好與前面的相反。
        //      "IMEX=1 "如果列中的資料型別不一致,使用"IMEX=1"可必免資料型別衝突。 
        OleDbConnection conn = new OleDbConnection(strConn);

        conn.Open();

        //返回Excel的架構,包括各個sheet表的名稱,型別,建立時間和修改時間等  
        DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });

        //包含excel中表名的字串陣列
        string[] strTableNames = new string[dtSheetName.Rows.Count];
        for (int k = 0; k < dtSheetName.Rows.Count; k++)
        {
            strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString();
        }

        OleDbDataAdapter myCommand = null;
        DataTable dt = new DataTable();

        //從指定的表明查詢資料,可先把所有表明列出來供使用者選擇
        string strExcel = "select * from [" + strTableNames[0] + "]";
        myCommand = new OleDbDataAdapter(strExcel, strConn);
        dt = new DataTable();
        myCommand.Fill(dt);

        return dt;
    }