您的位置:首页 > 数据库

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

2008-08-05 17:03 423 查看
导读:
  近日项目中有一个多笔料号要输入,我做了一个用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提交到数据库,这样就没有问题。
  


  
  文件上传控件:
  


  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 + "
" + stresname);
  


  
  Response.End();

本文转自
/article/5060367.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: