100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > C#导入excel到数据库

C#导入excel到数据库

时间:2023-06-24 07:26:43

相关推荐

C#导入excel到数据库

这几天又碰到了要导excel数据到数据库中,之前在网上也是找,东拼西凑也是把功能弄出来了,今天写个博客记录下。

首先页面的代码

@using (Html.BeginForm("Browse", "OutGygx", FormMethod.Post, new { enctype = "multipart/form-data", id = "form_Upload" })){ <input id="FileUpload" type="file" name="FileUpload" style="width: 200px; height: 24px; background: White" /> <input id="btnImport" type="submit" class="easyui-linkbutton c4" value="导入Excel" /><p style="color: Red; text-align: center;">@ViewBag.error</p> }<!-- 或者通过js提交 一定要使用from表单 --><form id="form" method="POST" enctype="multipart/form-data"><input id="FileUpload" type="file" name="FileUpload" style="width: 200px; height: 24px; background: White" /> <a href="#" class="easyui-linkbutton c4" onclick="Upload()">导入Excel</a></form>//处理上传文件function Upload() {var EquipmentNo = $("#EquipmentNo").textbox('getValue');$('#form').form('submit', {url: '/EI_CheckStandard/Browse?EquipmentNo=' + EquipmentNo,onSubmit: function () {return $(this).form('validate');},success: function (result) {if (result === "上传成功") {$.messager.alert('提示', result);} else {$.messager.alert('提示', result);}CallBack1('#dgItem');//重载记录 }});}

页面是通过from表单来访问到后台control中的方法

然后是control层

//将excel导入到数据库public ActionResult Browse(LSM_Out_ApplyGygx_M data){// 获取上传的文件 HttpPostedFileBase file = Request.Files["FileUpload"];string filename = Path.GetFileName(file.FileName);// 获取上传文件的大小单位为字节byte int filesize = file.ContentLength;// 获取上传文件的扩展名 string fileEx = System.IO.Path.GetExtension(filename); string FileName;string savePath;if (file == null || file.ContentLength <= 0){ViewBag.error = "文件不能为空";return Content("上传失败!");}else{// 获取无扩展名的文件名 string NoFileName = System.IO.Path.GetFileNameWithoutExtension(filename);// 定义上传文件的最大空间大小为10M int Maxsize = 10000 * 1024;// 定义上传文件的类型字符串 string FileType = ".xls,.xlsx";FileName = NoFileName + DateTime.Now.ToString("yyyyMMddhhmmss") + fileEx;if (!FileType.Contains(fileEx)){ViewBag.error = "文件类型不对,只能导入xls和xlsx格式的文件";return Content("上传失败!");}if (filesize >= Maxsize){ViewBag.error = "上传文件超过10M,不能上传";return Content("上传失败!");}// 指定文件存放路径(这里要在项目中建一个文件夹来存放上传的excel)string path = AppDomain.CurrentDomain.BaseDirectory + "Download\\excel\\";savePath = bine(path, FileName);//存入file.SaveAs(savePath);}string result = string.Empty;string strConn=null;//strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + savePath + "; " + "Extended Properties=Excel 8.0;"; //if (fileEx == ".xlsx") //excel的文件 //{// strConn = "Provider=Microsoft.Ace.OleDb.12.0;;Data Source=\"" + savePath + "\";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1;\"";//}//if (fileEx == ".xls")//excel的文件 //{// strConn = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=\"" + savePath + "\";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\"";//}// 此连接可以操作.xls与.xlsx文件 (支持Excel 和 Excel 的连接字符串)strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + savePath + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1'"; // 备注: "HDR=yes;"是说Excel文件的第一行是列名而不是数据,"HDR=No;"正好与前面的相反。 OleDbConnection conn = new OleDbConnection(strConn);// 打开数据库连接conn.Open();DataSet myDataSet = new DataSet();OleDbDataAdapter myCommand = new OleDbDataAdapter("select * from [Sheet1$]", strConn);try{//"IMEX=1 "如果列中的数据类型不一致,使用"IMEX=1"可必免数据类型冲突。 //OleDbDataAdapter myCommand = new OleDbDataAdapter("select * from [Sheet1$]", strConn); //连接串 //string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "DataSource=" + Path + ";" + "ExtendedProperties=Excel8.0;"; myCommand.Fill(myDataSet, "ExcelInfo");//OutGygxController.Deleted();DataTable table = myDataSet.Tables["ExcelInfo"].DefaultView.ToTable();for (int i = 0; i < table.Rows.Count; i++){// table.Rows[i][1] 就是获取第i行第1列的数据data.EmpName = table.Rows[i][1].ToString();}conn.Close();// 每次上传完毕删除文件System.IO.File.Delete(savePath);}catch (Exception ex){ViewBag.error = ex.Message;return Content("错误");}}

这里就到excel导入到获取数据功能就全实现了,最后只需要将获取到的数据存到表中就可以了。

因为这种方式会上传一份excel到服务器保存才获取到数据,为了避免资源浪费,最后加上

System.IO.File.Delete()

就可以删除掉服务器上的excel了

这个代码适用于vs以上版本,当然vs及以下版本也使用,适当改下代码就可以了

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。