天天看点

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();