天天看點

EXCEL導入GridView,然後再彙入資料庫.

近日項目中有一個多筆料号要輸入,我做了一個用javascript複制輸入框的功能,可以輸入多筆料号。

但是使用者回報,料号太多,可能幾百個料号在EXCEL檔案裡,這樣輸入很慢,需要增加功能。于是想到了SQLSERVER導入EXCEL的功能。

EXCEL導入GridView,然後再彙入資料庫.

declare @strExcelName varchar(50)

EXCEL導入GridView,然後再彙入資料庫.

set @strExcelName='c:\sl.xls'

EXCEL導入GridView,然後再彙入資料庫.

exec('select * into ##tmp from openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=No;IMEX=1;DATABASE='+@strExcelName+''',[Sheet1$]) ')

EXCEL導入GridView,然後再彙入資料庫.

select * from ##tmp

這樣是可以導入資料,但是問題來了。我的資料庫伺服器和運作程式伺服器不在同一伺服器,無法導入(可能有方法,但是項目緊,沒時間去探索),于是想到另外一個方法:先上傳EXCEL檔案,然後讀入DATASET放入GridView,然後從GridView送出到資料庫,這樣就沒有問題。

EXCEL導入GridView,然後再彙入資料庫.

檔案上傳控件:<input id="myFile" runat="server" type="file" />

EXCEL導入GridView,然後再彙入資料庫.

Form裡不需要enctype="multipart/form-data"

檔案上傳代碼:

EXCEL導入GridView,然後再彙入資料庫.

            if (myFile.PostedFile.FileName != "")

EXCEL導入GridView,然後再彙入資料庫.
EXCEL導入GridView,然後再彙入資料庫.
EXCEL導入GridView,然後再彙入資料庫.

{

EXCEL導入GridView,然後再彙入資料庫.

                //上傳檔案的絕對路徑

EXCEL導入GridView,然後再彙入資料庫.

                string sFile = myFile.PostedFile.FileName;

EXCEL導入GridView,然後再彙入資料庫.

                //擷取檔案全名

EXCEL導入GridView,然後再彙入資料庫.

                sFile = sFile.Substring(sFile.LastIndexOf("\\") + 1);

EXCEL導入GridView,然後再彙入資料庫.

                //擷取字尾名

EXCEL導入GridView,然後再彙入資料庫.

                sFile = sFile.Substring(sFile.LastIndexOf("."));

EXCEL導入GridView,然後再彙入資料庫.

                if (sFile.ToLower() != ".xls")

EXCEL導入GridView,然後再彙入資料庫.
EXCEL導入GridView,然後再彙入資料庫.
EXCEL導入GridView,然後再彙入資料庫.
EXCEL導入GridView,然後再彙入資料庫.

                    Response.Write("請選擇Excel檔案!");

EXCEL導入GridView,然後再彙入資料庫.

                    Response.End();

EXCEL導入GridView,然後再彙入資料庫.

                }

EXCEL導入GridView,然後再彙入資料庫.

                //為了防止重名,獲得日期為檔案名年月日時分秒毫秒

EXCEL導入GridView,然後再彙入資料庫.

                string datatime = System.DateTime.Now.ToString("yyyMMddHHmmssffff");

EXCEL導入GridView,然後再彙入資料庫.

                //上傳後檔案的新名

EXCEL導入GridView,然後再彙入資料庫.

                sFile = datatime + sFile;

EXCEL導入GridView,然後再彙入資料庫.

                //AppDomain.CurrentDomain.BaseDirectory.ToString() 擷取此項目的根目錄

EXCEL導入GridView,然後再彙入資料庫.

                //sPath 擷取上傳後的路徑

EXCEL導入GridView,然後再彙入資料庫.

                string sPath = AppDomain.CurrentDomain.BaseDirectory.ToString() + "ExcelFiles\\" + sFile;

EXCEL導入GridView,然後再彙入資料庫.

                //上傳檔案

EXCEL導入GridView,然後再彙入資料庫.

                myFile.PostedFile.SaveAs(sPath);

EXCEL導入GridView,然後再彙入資料庫.

                this.myGridView.DataSource = GetExcelContent(sPath);

EXCEL導入GridView,然後再彙入資料庫.

                this.myGridView.DataBind();

EXCEL導入GridView,然後再彙入資料庫.

            }

讀取EXCEL到DATASET代碼:

EXCEL導入GridView,然後再彙入資料庫.

        private DataSet GetExcelContent(string filepath)

EXCEL導入GridView,然後再彙入資料庫.
EXCEL導入GridView,然後再彙入資料庫.
EXCEL導入GridView,然後再彙入資料庫.
EXCEL導入GridView,然後再彙入資料庫.

            string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties='Excel 8.0;HDR=No;IMEX=1'";

EXCEL導入GridView,然後再彙入資料庫.

            System.Data.OleDb.OleDbConnection myConn = new System.Data.OleDb.OleDbConnection(strCon);

EXCEL導入GridView,然後再彙入資料庫.

            string strCom = "SELECT F1 as resno,F2 as resname FROM [Sheet1$]";

EXCEL導入GridView,然後再彙入資料庫.

            myConn.Open();

EXCEL導入GridView,然後再彙入資料庫.

            System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(strCom, myConn);

EXCEL導入GridView,然後再彙入資料庫.

            //建立一個DataSet對象   

EXCEL導入GridView,然後再彙入資料庫.

            DataSet myDataSet = new DataSet();

EXCEL導入GridView,然後再彙入資料庫.

            //得到自己的DataSet對象   

EXCEL導入GridView,然後再彙入資料庫.

            myCommand.Fill(myDataSet);

EXCEL導入GridView,然後再彙入資料庫.

            //關閉此資料連結   

EXCEL導入GridView,然後再彙入資料庫.

            myConn.Close();

EXCEL導入GridView,然後再彙入資料庫.

            return myDataSet;

EXCEL導入GridView,然後再彙入資料庫.

        }

最後是資料送出到資料庫代碼:

EXCEL導入GridView,然後再彙入資料庫.

            string stresno = "";

EXCEL導入GridView,然後再彙入資料庫.

            string stresname = "";

EXCEL導入GridView,然後再彙入資料庫.

            foreach (GridViewRow row in this.myGridView.Rows)

EXCEL導入GridView,然後再彙入資料庫.
EXCEL導入GridView,然後再彙入資料庫.
EXCEL導入GridView,然後再彙入資料庫.
EXCEL導入GridView,然後再彙入資料庫.

                Label txtesno = (Label)row.FindControl("labresno");

EXCEL導入GridView,然後再彙入資料庫.

                stresno += txtesno.Text.ToString().Trim().Replace("'", "''") + ";";

EXCEL導入GridView,然後再彙入資料庫.
EXCEL導入GridView,然後再彙入資料庫.

                Label txtresname = (Label)row.FindControl("labresname");

EXCEL導入GridView,然後再彙入資料庫.

                stresname += txtresname.Text.ToString().Trim().Replace("'", "''") + ";";

EXCEL導入GridView,然後再彙入資料庫.
EXCEL導入GridView,然後再彙入資料庫.

            Response.Write(stresno + "<br/>" + stresname);

EXCEL導入GridView,然後再彙入資料庫.

            Response.End();