先看界面图

实现的基本思想:

1,先使用FileUpload控件fuload将Excel文件上传到服务器上得某一个文件夹。

2,使用OleDb将已经上传到服务器上的Excel文件读出来,这里将Excel文件当做一个数据库来读。在联系数据库语句中,Data Source就是该文件在服务器上得物理路径

3,将第二步中读出的数据以DataTable对象返回。

4,遍历DataTable对象,然后到Sql Server数据库中查询,是否存在该条数据。如果存在,可以做更新,或者不做处理;如果不存在,则插入数据。

注意:在遍历DataTable的时候,可是使用dt.Rows[i]["Name"].ToString();Name为Name列的表头,所以Excel中列的顺序就无关紧要了。当然,前提是你知道Excel里列中各表头的名字。如果Excel中列的顺序固定,即可按下面代码中的方式进行。

添加的引用:

  1. using System;
  2. using System.Data;
  3. using System.Data.OleDb;
  4. using System.Data.SqlClient;
  5. using System.IO;
  6. using System.Text;
  7. using System.Web;
  8. using System.Web.UI;

代码:

  1. private DataTable xsldata()
  2. {
  3. if(fuload.FileName == "")
  4. {
  5. lbmsg.Text = "请选择文件";
  6. return null;
  7. }
  8. string fileExtenSion;
  9. fileExtenSion = Path.GetExtension(fuload.FileName);
  10. if(fileExtenSion.ToLower() != ".xls" && fileExtenSion.ToLower() != ".xlsx")
  11. {
  12. lbmsg.Text = "上传的文件格式不正确";
  13. return null;
  14. }
  15. try
  16. {
  17. string FileName = "App_Data/" + Path.GetFileName(fuload.FileName);
  18. if(File.Exists(Server.MapPath(FileName)))
  19. {
  20. File.Delete(Server.MapPath(FileName));
  21. }
  22. fuload.SaveAs(Server.MapPath(FileName));
  23. //HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES
  24. string connstr2003 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(FileName) + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
  25. string connstr2007 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath(FileName) + ";Extended Properties=\"Excel 12.0;HDR=YES\"";
  26. OleDbConnection conn;
  27. if(fileExtenSion.ToLower() == ".xls")
  28. {
  29. conn = new OleDbConnection(connstr2003);
  30. }
  31. else
  32. {
  33. conn = new OleDbConnection(connstr2007);
  34. }
  35. conn.Open();
  36. string sql = "select * from [Sheet1$]";
  37. OleDbCommand cmd = new OleDbCommand(sql, conn);
  38. DataTable dt = new DataTable();
  39. OleDbDataReader sdr = cmd.ExecuteReader();
  40.  
  41. dt.Load(sdr);
  42. sdr.Close();
  43. conn.Close();
  44. //删除服务器里上传的文件
  45. if(File.Exists(Server.MapPath(FileName)))
  46. {
  47. File.Delete(Server.MapPath(FileName));
  48. }
  49. return dt;
  50. }
  51. catch(Exception e)
  52. {
  53. return null;
  54. }
  55. }
  56.  
  57. protected void Btn_Export_Excel_To_DB_Click(object sender, EventArgs e)
  58. {
  59. try{
  60.  
  61. DataTable dt = xsldata();
  62.  
  63. //dataGridView2.DataSource = ds.Tables[0];
  64. int errorcount = ;//记录错误信息条数
  65. int insertcount = ;//记录插入成功条数
  66.  
  67. int updatecount = ;//记录更新信息条数
  68.  
  69. string strcon = "server=localhost;database=database1;uid=sa;pwd=sa";
  70. SqlConnection conn = new SqlConnection(strcon);//链接数据库
  71. conn.Open();
  72.  
  73. for(int i = ; i < dt.Rows.Count; i++)
  74. {
  75. string Name = dt.Rows[i][].ToString();//dt.Rows[i]["Name"].ToString(); "Name"即为Excel中Name列的表头
  76. string Sex = dt.Rows[i][].ToString();
  77. int Age = Convert.ToInt32(dt.Rows[i][].ToString());
  78. string Address = dt.Rows[i][].ToString();
  79. if(Name != "" && Sex != "" && Age != && Address != "")
  80. {
  81. SqlCommand selectcmd = new SqlCommand("select count(*) from users where Name='" + Name + "' and Sex='" + Sex + "' and Age='" + Age + "' and Address=" + Address, conn);
  82. int count = Convert.ToInt32(selectcmd.ExecuteScalar());
  83. if(count > )
  84. {
  85. updatecount++;
  86. }
  87. else
  88. {
  89. SqlCommand insertcmd = new SqlCommand("insert into users(Name,Sex,Age,Address) values('" + Name + "','" + Sex + "'," + Age + ",'" + Address + "')", conn);
  90. insertcmd.ExecuteNonQuery();
  91. insertcount++;
  92. }
  93. }
  94. else
  95. {
  96. errorcount++;
  97. }
  98. }
  99. Response.Write((insertcount + "条数据导入成功!" + updatecount + "条数据重复!" + errorcount + "条数据部分信息为空没有导入!"));
  100. }
  101. catch(Exception ex)
  102. {
  103.  
  104. }
  105. }

ASP.NET Excel导入Sql Server数据库(转)的更多相关文章

  1. Excel表数据导入Sql Server数据库中

    Excel表数据导入Sql Server数据库的方法很多,这里只是介绍了其中一种: 1.首先,我们要先在test数据库中新建一个my_test表,该表具有三个字段tid int类型, tname nv ...

  2. Excel文件导入SQL Server数据库

    Excel表格的使用可谓是非常广泛,博主也简单百度了一下Excel的发展. 发展历程: 1982年 Microsoft推出了它的第一款电子制表软件-Multiplan,并在CP/M系统上大 Excel ...

  3. 极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)

    原文:极限挑战-C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码) 实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本实验将使用5中方法完成这个过程,并详细记录各种方 ...

  4. 把Excel导入SQL server时出现错误

    在把Excel导入SQL server时出现“未在本地计算机上注册 Microsoft.ACE.OLEDB.12.0 ”该 错误信息:未在本地计算机上注册“microsoft.ACE.oledb.12 ...

  5. excel导入sql server 文本被截断,或者一个或多个字符在目标代码页中没有匹配项 错误处理

    excel导入sql server 文本被截断,或者一个或多个字符在目标代码页中没有匹配项 错误处理方法: 方案1:修改注册表 出现文本被截断的原因是SQL Server的导入导出为了确定数据表的字段 ...

  6. 将Excel导入SQL Server 只能导入数字,其他数据变为NULL怎么解决?

    先新建一个TXT文件,把数据粘贴进去 再新建一个Excel文件,在菜单栏中选Data再选From Text 找到txt文件,点import 一定要选Text 点Finish,点OK. 接下来在往数据库 ...

  7. Excel 导入 Sql Server出错——“文本被截断,或者一个或多个字符在目标代码页中没有匹配项”错误的解决

    有人说应该先转成Access, 再转到Sql Server. 其实用处并不大, 要截断的还是被截断了. 原因是,SQL Server的导入导出为了确定数据表的字段类型,取excel文件的前8行来判别. ...

  8. C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)

    作者: Aicken(李鸣)  来源: 博客园  发布时间: 2010-09-08 15:00  阅读: 4520 次  推荐: 0                   原文链接   [收藏] 摘要: ...

  9. 提权案例(一)渗透某asp.net网站通过sql server数据库public 提权 思路分享

    先罗列出sql server 角色用户的权限 按照从最低级别角色(bulkadmin)到最高级别角色(sysadmin)的顺序进行描述:1.bulkadmin:这个角色可以运行BULK INSERT语 ...

随机推荐

  1. jquery.cityselect.js基于jQuery+JSON的省市或自定义联动效果

    一.插件介绍 最早做省市联动的时候都特别麻烦,后来在helloweba的一篇文章中看到这个插件,很不错的,后来就一直用了. 省市区联动下拉效果在WEB中应用非常广泛,尤其在一些会员信息系统.电商网站最 ...

  2. 经验分享:极速化 CocoaPods

    Cocopods 本身是一个优秀的 iOS 开发的包管理工具,涵盖了 7k+ 的开源组件,包管理库是托管在 Github.由于众所周知的原因它的速度日渐缓慢,有时会频繁报如下错误: 1 2 3 4 $ ...

  3. 安徽省2016“京胜杯”程序设计大赛_J_YZK的大别墅

    YZK的大别墅 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 24 Accepted: 12 Description 土豪 ...

  4. 数据结构二叉树的所有基本功能实现。(C++版)

    本人刚学数据结构,对树的基本功能网上找不到C++代码 便自己写了一份,贴出方便大家进行测试和学习. 大部分功能未测试,如有错误或者BUG,请高手们指教一下,谢谢. 结点声明: BinTreeNode. ...

  5. NodeJS基本使用简介

    Node.js 1.Nvm Node的版本管理工具,用于切换node的版本 一.下载nvm,放在纯英文路径 二.用命令行打开nvm.exe 三.打开setting.txt,其中有四个配置. Root: ...

  6. java自旋锁

    一 Test-and-Set Lock 所谓测试设置是最基本的锁,每个线程共用一把锁,进入临界区之前看没有有线程在临界区,如果没有,则进入,并上锁,如果有则等待.java实践中利用了原子的设置stat ...

  7. Spring(一)

    1.1 Spring框架的概述 1.1.1什么是Spring Spring是分层的JavaSE和JavaEES一站式轻量级开源框架. 分层: SUN提供的EE的三层结构:web层.业务层.数据访问层( ...

  8. ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1

    什么是 ThinkSNS+ 09 年,由北京的团队开发了 ThinkSNS 涉足社交开源行业.这么多年累计不少客户.2014-2016,两年都在维护和开发之前基于 TP 的 ThinkSNS , 慢慢 ...

  9. OpenGL与CUDA互操作方式总结

    一.介绍 CUDA是Nvidia推出的一个通用GPU计算平台,对于提升并行任务的效率非常有帮助.本人主管的项目中采用了OpenGL做图像渲染,但是在数据处理方面比较慢,导致帧率一直上不来.于是就尝试把 ...

  10. 从FMDB到WCDB、微信团队怎么说?

    WCDB背景 自己初次见到WCDB是微信开发团队公众号在今年五月份推送的一篇文章中(开发者团队的微信号上面图片中有,值得大家关注一下),那时候就说在筹备着WCDB的开源,觉得很是新奇,在两个多月前WC ...