EXCEL导入GridView,然后再汇入数据库.

原文: EXCEL导入GridView,然后再汇入数据库.

近日项目中有一个多笔料号要输入,我做了一个用javascript复制输入框的功能,可以输入多笔料号。
但是使用者反馈,料号太多,可能几百个料号在EXCEL文件里,这样输入很慢,需要增加功能。于是想到了SQLSERVER导入EXCEL的功能。

declare   @strExcelName   varchar ( 50 )
set   @strExcelName = ' c:\sl.xls '
exec ( ' select * into ##tmp from openrowset( '' MICROSOFT.JET.OLEDB.4.0 '' , '' Excel 8.0;HDR=No;IMEX=1;DATABASE= ' + @strExcelName + ''' ,[Sheet1$])  ' )
select   *   from  ##tmp

这样是可以导入数据,但是问题来了。我的数据库服务器和运行程序服务器不在同一服务器,无法导入(可能有方法,但是项目紧,没时间去探索),于是想到另外一个方法:先上传EXCEL文件,然后读入DATASET放入 GridView,然后从 GridView提交到数据库,这样就没有问题。
文件上传控件: < input  id ="myFile"  runat ="server"  type ="file"   />
Form里不需要enctype="multipart/form-data"

文件上传代码:
             if  (myFile.PostedFile.FileName  !=   "" )
            
{
                
//上传文件的绝对路径
                string sFile = myFile.PostedFile.FileName;
                
//获取文件全名
                sFile = sFile.Substring(sFile.LastIndexOf("\\"+ 1);
                
//获取后缀名
                sFile = sFile.Substring(sFile.LastIndexOf("."));
                
if (sFile.ToLower() != ".xls")
                
{
                    Response.Write(
"请选择Excel文件!");
                    Response.End();
                }

                
//为了防止重名,获得日期为文件名年月日时分秒毫秒
                string datatime = System.DateTime.Now.ToString("yyyMMddHHmmssffff");
                
//上传后文件的新名
                sFile = datatime + sFile;
                
//AppDomain.CurrentDomain.BaseDirectory.ToString() 获取此项目的根目录
                
//sPath 获取上传后的路径
                string sPath = AppDomain.CurrentDomain.BaseDirectory.ToString() + "ExcelFiles\\" + sFile;
                
//上传文件
                myFile.PostedFile.SaveAs(sPath);
                
this.myGridView.DataSource = GetExcelContent(sPath);
                
this.myGridView.DataBind();
            }

读取EXCEL到DATASET代码:
         private  DataSet GetExcelContent( string  filepath)
        
{
            
string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties='Excel 8.0;HDR=No;IMEX=1'";
            System.Data.OleDb.OleDbConnection myConn 
= new System.Data.OleDb.OleDbConnection(strCon);
            
string strCom = "SELECT F1 as resno,F2 as resname FROM [Sheet1$]";
            myConn.Open();
            System.Data.OleDb.OleDbDataAdapter myCommand 
= new System.Data.OleDb.OleDbDataAdapter(strCom, myConn);
            
//创建一个DataSet对象   
            DataSet myDataSet = new DataSet();
            
//得到自己的DataSet对象   
            myCommand.Fill(myDataSet);
            
//关闭此数据链接   
            myConn.Close();
            
return myDataSet;
        }

最后是数据提交到数据库代码:
             string  stresno  =   "" ;
            
string  stresname  =   "" ;
            
foreach  (GridViewRow row  in   this .myGridView.Rows)
            
{
                Label txtesno 
= (Label)row.FindControl("labresno");
                stresno 
+= txtesno.Text.ToString().Trim().Replace("'""''"+ ";";

                Label txtresname 
= (Label)row.FindControl("labresname");
                stresname 
+= txtresname.Text.ToString().Trim().Replace("'""''"+ ";";
            }

            Response.Write(stresno 
+   " <br/> "   +  stresname);
            Response.End();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值