经常会有人问这个问题,所以整好一个就放上来!这里只涉及到实现,并不涉及到性能或者可拓展性!

本例子测试成功!(vs2008 +sql2005+office2007)

思路:先上传XLS文件,然后用OleDB连接Excel文件,将Excel数据导入Dataset,再将Dataset数据导入数据库。
以下是主调入过程

以下是各个主要的函数。
其中ImportXlsToData是使用OleDb链接Excel文件并将其数据导入Dataset中;
UpdateXls是上传Xls文件
AddDatasetToSQL是将Dataset导入数据库

--------------------------------------------------------------------------------------------------------------

aspx.cs页面的代码

protected void Button1_Click(object sender, EventArgs e) { //string strConn = ConfigurationManager.ConnectionStrings["NEW_ConnectionString"].ConnectionString; //SqlConnection conn = new SqlConnection(strConn); //conn.Open(); //string sql1 = @"insert into manager select * from openrowset ( 'Microsoft.Jet.OLEDB.4.0', 'EXCEL 5.0;HDR=YES;IMEX=1; DATABASE=E:/test/GDSS/GDSS.xls',Sheet1$)"; //SqlCommand cmd = new SqlCommand(sql1, conn); //cmd.ExecuteNonQuery(); //chenyl 2009.10.22 string filename = string.Empty; try { filename = UpdateXls(this.flUpLoad);//上传XLS文件 ImportXlsToData(filename);//将XLS文件内容导入 //删除文件 if (filename != string.Empty && File.Exists(filename)) { File.Delete(filename);//删除上传的文件 } } catch (Exception ex) { //出错处理 Response.Write("<mce:script type="text/javascript"><!-- alert('" + ex.Message + "') // --></mce:script>"); } finally { } //chenyl 2009.10.22 } /// <summary> /// 上传excel到服务器端 (通用独立函数) /// 命名为随机 /// </summary> /// <param name="inputfile">html上次控件的名称</param> private string UpdateXls(System.Web.UI.HtmlControls.HtmlInputFile inputfile) { string orifilename = string.Empty; string uploadfilepath = string.Empty; string modifyfilename = string.Empty; string fileExtend = "" ;//文件扩展名 int fileSize = 0;//文件大小 string path = "";//自定义的excel的路径 try { if(inputfile.Value != string.Empty) { //得到文件的大小 fileSize = inputfile.PostedFile.ContentLength; if(fileSize == 0 ) { throw new Exception("找不到该文件!"); } //得到扩展名 fileExtend = inputfile.Value.Substring(inputfile.Value.LastIndexOf(".")+1); if(fileExtend.ToLower() != "xls") { throw new Exception("请确认您所导入的文件是否EXCEL文件!!"); } //路径 uploadfilepath = System.Web.HttpContext.Current.Server.MapPath(".")+path; //新文件名 modifyfilename = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString(); modifyfilename += "."+inputfile.Value.Substring(inputfile.Value.LastIndexOf(".")+1); //判断是否有该目录 System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(uploadfilepath); if (!dir.Exists) { dir.Create(); } orifilename = uploadfilepath+modifyfilename; //如果存在,删除文件 if(File.Exists(orifilename)) { File.Delete(orifilename); } // 上传文件 inputfile.PostedFile.SaveAs(orifilename); } else { throw new Exception("没有选择Excel文件!"); } } catch(Exception ex) { throw ex; } return orifilename; } /// <summary> /// 从Excel提取数据--》Dataset(通用独立函数) /// </summary> /// <param name="filename">Excel文件路径名</param> private void ImportXlsToData(string fileName) { try { if (fileName == string.Empty) { throw new ArgumentNullException("上传文件失败!"); } // string oleDBConnString = String.Empty; oleDBConnString = "Provider=Microsoft.Jet.OLEDB.4.0;"; oleDBConnString += "Data Source="; oleDBConnString += fileName; oleDBConnString += ";Extended Properties=Excel 8.0;"; // OleDbConnection oleDBConn = null; OleDbDataAdapter oleAdMaster = null; DataTable m_tableName=new DataTable(); DataSet ds=new DataSet(); oleDBConn = new OleDbConnection(oleDBConnString); oleDBConn.Open(); m_tableName=oleDBConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null); if (m_tableName != null && m_tableName.Rows.Count > 0) { m_tableName.TableName =m_tableName.Rows[0]["TABLE_NAME"].ToString(); } string sqlMaster; sqlMaster=" SELECT * FROM ["+m_tableName.TableName+"]"; oleAdMaster=new OleDbDataAdapter(sqlMaster,oleDBConn); oleAdMaster.Fill(ds,"m_tableName"); oleAdMaster.Dispose(); oleDBConn.Close(); oleDBConn.Dispose(); //将Dataset中数据导入SQL AddDatasetToSQL(ds); } catch(Exception ex) { throw ex; } } //将Dataset的内容导入SQL //自定义的将上传的数据存入mssql private bool AddDatasetToSQL(DataSet pds) { //打开数据库 string strConn = ConfigurationManager.ConnectionStrings["NEW_ConnectionString"].ConnectionString; SqlConnection conn = new SqlConnection(strConn); conn.Open(); string strsql = string.Empty; int ic,ir; ic = pds.Tables[0].Columns.Count;//列记录数 ir = pds.Tables[0].Rows.Count;//行的记录数 if (pds != null && ir > 0) { for (int i = 0; i < ir; i++) { strsql += "insert into manager (manager_id) values("+pds.Tables[0].Rows[i][0].ToString()+") ;"; // Response.Write(pds.Tables[0].Rows[i][0].ToString()+pds.Tables[0].Rows[i][1].ToString()+ // pds.Tables[0].Rows[i][2].ToString()+pds.Tables[0].Rows[i][3].ToString()+ // pds.Tables[0].Rows[i][4].ToString()+pds.Tables[0].Rows[i][5].ToString()+ // pds.Tables[0].Rows[i][6].ToString()); } //拼装完成后执行插入sql语句 SqlCommand cmd = new SqlCommand(strsql, conn); cmd.ExecuteNonQuery(); Response.Write("<mce:script type="text/javascript"><!-- alert('您成功导入" + ir + "条记录') // --></mce:script>"); } else { Response.Write("<mce:script type="text/javascript"><!-- alert('导入数据为空!') // --></mce:script>"); } return true; }

aspx页面代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <input type ="file" id="flUpLoad" runat="server" /> <asp:Button ID="Button1" runat="server" οnclick="Button1_Click" Text="上传" /> </div> </form> </body> </html>

web.config中需要添加数据库连接字符串

<connectionStrings> <add name="NEW_ConnectionString" connectionString="Data Source=localhost;Initial Catalog=NEW.mdf;Persist Security Info=True;User ID=sa;Password=test" providerName="System.Data.SqlClient" /> </connectionStrings>

参考:

http://blog.csdn.net/zhouxin464585932/archive/2009/07/17/4356030.aspx

上传excel到服务器端,并写入到mssql数据库相关推荐

  1. asp.net C# 实现上传Excel文件导入数据到SQL Server 数据库

    前台代码,有点简单: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server&q ...

  2. java ajax 导入excel_通过ajax上传excel

    搜索热词 html: @H_404_3@ @H_404_3@上       传:@H_404_3@ @H_404_3@ @H_404_3@ @H_404_3@ @H_404_3@导入@H_404_3@ ...

  3. python 通过上传excel对数据分割分组导出

    废话不多说,直接开讲! 昨天接到任务:通过上传excel表格数据,对数据进行500一组分组分割到excel表格进行导出!说实在的,这个问题并不常见!但是感觉可以实现,于是乎今天写博客记录下! 好了,废 ...

  4. 实现web前端上传excel文件到flask服务器

    这里有两种方法:1. html方式:2. javascript方式(jQuery+ajax) 第1种方法:html方式 这种方法直接通过设计form表单相关属性实现将excel表格上传到服务器,并在服 ...

  5. VFPBS上传EXCEL并保存MSSQL到数据库中

    开发环境 后端:VFP SP2 7423 +祺佑三层开发框架(猫框) 前端:VUE2.0+Element 思路 实现BS上传 就是利用猫框的importexcel类将EXCEL文件转换为临时表, 将临 ...

  6. ios App上传Excel文件

    今天App有个需求,需要从本地上传Excel文件到后台,大家知道苹果是沙盒机制,App之间不许分享数据. 第一种方式就是App之间共享数据,上传文件大部分人应该是从微信或者QQ等三方应用过来,那么问题 ...

  7. Web项目,网页上传excel文件并解析实战示例

    最近写了一个基于poi解析excel文件的工具类,所以想在web项目中测试一下,就做了这个简单的项目.本项目主要使用了 SpringMVC+RESTful+Maven的风格.适合有一定基础的人员. 源 ...

  8. 上传excel文件,导出excel模板实现

    此功能上商品导入,分别有导入组别,品类,属性(json字符串截取)等多功能多表实现. 导出功能,根据自定义需要的模板名称生成可配置模板 controller调用前段路径,然后导入/导出模板工具,ser ...

  9. java 文件上传Excel解析(表头不固定顺序,多sheet页)并插入数据库

    文件上传返回存贮路径 /** * 前端上传文件 返回存储路径 * */public static String fileUpload(HttpServletRequest request, HttpS ...

最新文章

  1. Linux新建用户名
  2. “技术崇拜”与“技术恐惧”都会阻碍 AI 创新,“技术节制”才是正道
  3. Vmware 和 Windows 代理设置
  4. BS-GX-018 基于SSM实现在校学生考试系统
  5. 互联网人不敢生孩子:加班多、想跳槽、怕被边缘化
  6. (转)mybatis一级缓存二级缓存
  7. openresty获取nginx请求url中的所有参数
  8. tp5 sum某个字段相加得到总数
  9. Leet Code题解 - 1559. Detect Cycles in 2D Grid 检测二维无向图中的环
  10. LeetCode 1631. 最小体力消耗路径(DFS + 二分查找)
  11. ES6中对象新增方法
  12. C#读取文本数据(按行读取)
  13. 《Vim实用技巧(第2版)》——1.4 执行、重复、回退
  14. u8系统计算机上启动不了,用友erp u8装好后为何启动不了
  15. 雾霾天出行,如何精确避开“雷区”?2016 SODA数据侠十强
  16. UML之Astah的基本使用教程-4(活动图、序列图、Stereotype Icon)
  17. EIA/TIA布线标准(568A、568B)
  18. 중국인이 한국인을 보는눈길
  19. 【json】json文件中文乱码
  20. 爬虫 scrapy框架 爬取360图片

热门文章

  1. 4.Dubbo的常用协议
  2. Keil4和Proteus8的联调方法小叙
  3. (2)文章页面浏览次数+网站访问次数统计显示
  4. 两台计算机的ip地址怎么配置,电脑两个或多个IP地址设置方法
  5. JSP与JavaScript的区别
  6. 工业元宇宙讲座PPT讲义
  7. 博物馆展览馆智能互动多媒体中控系统场景触发视频播放器
  8. ftk的python binding
  9. anaconda3全局模式
  10. UE4 多个角色控制权的切换