首先呢?要看你的电脑的office版本,我的是office 2013 .为了使用oledb程序,需要安装一个引擎。名字为AccessDatabaseEngine.exe。这里不过多介绍了哦。它的数据库连接字符串是"Provider=Microsoft.Ace.OleDb.12.0;Data Source={0};Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'"

所以,我们是使用ole来读取excel的。

1 excel 的文件内容:

2 测试的页面设计图

3 webconfig里设置数据库相关字符串

4 测试页面的代码:

简单的布局,主要看功能:

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ExcelTodatabase.aspx.cs" Inherits="ExcelToDatabase.ExcelTodatabase" %>
  2.  
  3. <!DOCTYPE html>
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head runat="server">
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  8. <title></title>
  9. </head>
  10. <body>
  11. <form id="form1" runat="server">
  12. <div>
  13.  
  14. <asp:FileUpload ID="Excelfile" runat="server" />
  15.  
  16. <asp:Button ID="btnFileUp" runat="server" Text="提交" OnClick="btnFileUp_Click" />
  17. <br />
  18. <br />
  19. <br />
  20. <asp:GridView ID="gvExcel" runat="server">
  21. </asp:GridView>
  22. <br />
  23. <br />
  24. <asp:Label ID="debug" runat="server" Text="Label"></asp:Label>
  25. <br />
  26.  
  27. </div>
  28. </form>
  29. </body>
  30. </html>

5 主要功能:

5.1 导入文件

5.2 将excel导入datatable

5.3 将datatable 写入数据库

完整的代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. using System.Data;
  8. using System.Data.SqlClient;
  9. using System.Data.OleDb;
  10. using System.IO;
  11. using System.Configuration;
  12.  
  13. namespace ExcelToDatabase
  14. {
  15. public partial class ExcelTodatabase : System.Web.UI.Page
  16. {
  17. // 连接字符串
  18. private static string connString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
  19. protected void Page_Load(object sender, EventArgs e)
  20. {
  21.  
  22. }
  23.  
  24. protected void btnFileUp_Click(object sender, EventArgs e)
  25. {
  26. if (Excelfile.HasFile)
  27. {
  28. //检查文件扩展名
  29. string filename = Path.GetFileName(Excelfile.PostedFile.FileName);
  30. //debug.Text = filename;
  31. string extension = Path.GetExtension(Excelfile.PostedFile.FileName);
  32. //debug.Text = extension;
  33. if (extension != ".xlsx")
  34. {
  35. Response.Write("<script>alert('抱歉!您上传的不是有效的Excel文件')</script>");
  36. }
  37. else
  38. {
  39. //首先保存到服务器上
  40. string newFileName = "excel"+DateTime.Now.ToString("yyyyMMddHHmmssfff");
  41. string savePath = "ExcelFiles/"+newFileName;
  42. Excelfile.PostedFile.SaveAs(Server.MapPath(savePath)+extension);
  43. //debug.Text = Server.MapPath(savePath) + extension;
  44. //这里可以导入数据了
  45. string fileUrl = Server.MapPath(savePath) + extension;
  46. DataTable dt = GetExcel(fileUrl);
  47. gvExcel.DataSource = dt;
  48. gvExcel.DataBind();
  49. //写入数据库
  50. bool addToDb = InsertDb(dt);
  51. if (addToDb)
  52. {
  53. Response.Write("<script>alert('写入数据库成功')</script>");
  54. }
  55. else
  56. {
  57. Response.Write("<script>alert('抱歉!写入失败')</script>");
  58. }
  59. }
  60. }
  61. else
  62. {
  63. Response.Write("<script>alert('抱歉!您还没上传文件')</script>");
  64. }
  65. }
  66. /// <summary>
  67. /// 根据文件名来导入excel到datatable
  68. /// </summary>
  69. /// <param name="fileUrl"></param>
  70. /// <returns></returns>
  71. public DataTable GetExcel(string fileUrl)
  72. {
  73. const string cmdText = "Provider=Microsoft.Ace.OleDb.12.0;Data Source={0};Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";
  74. DataTable dt = null;
  75. OleDbConnection conn = new OleDbConnection(string.Format(cmdText, fileUrl));
  76. try
  77. {
  78. //打开连接
  79. if (conn.State == ConnectionState.Broken || conn.State == ConnectionState.Closed)
  80. {
  81. conn.Open();
  82. }
  83. DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
  84. //获取Excel的第一个Sheet名称
  85. string sheetName = schemaTable.Rows[]["TABLE_NAME"].ToString().Trim();
  86. //查询sheet中的数据
  87. string strSql = "SELECT * FROM [" + sheetName + "]";//sql语句,可以修改
  88. OleDbDataAdapter da = new OleDbDataAdapter(strSql, conn);
  89. DataSet ds = new DataSet();
  90. da.Fill(ds);
  91. dt = ds.Tables[];
  92. return dt;
  93. }
  94. catch (Exception)
  95. {
  96.  
  97. throw;
  98. }
  99. }
  100. public bool InsertDb(DataTable dt)
  101. {
  102. int result=;
  103. //1 首先是要 定义好字段
  104. string name = "";
  105. string money = "";
  106. //遍历存在的表格
  107. foreach (DataRow dr in dt.Rows)
  108. {
  109. name = dr["name"].ToString().Trim();
  110. money = dr["money"].ToString().Trim();
  111. string sql = String.Format("insert into test(name,money)values('{0}','{1}')",name,money);//sql语句,测试用的
  112. using (SqlConnection conn=new SqlConnection(connString))
  113. {
  114. conn.Open();
  115. SqlCommand cmd = new SqlCommand(sql,conn);
  116. result = cmd.ExecuteNonQuery();
  117. }
  118. }
  119. if (result>)
  120. {
  121. return true;
  122. }
  123. else
  124. {
  125. return false;
  126. }
  127. }
  128. }
  129. }

实际运行的页面

数据库中内容:

简单的过程就是这样了。。

难度在于几个错误

1 未在本机计算机注册.............解决:看开头介绍的

2 其他的一些错误暂且未发现与程序相关的。可以自行解决。

完整项目下载地址:http://files.cnblogs.com/files/fanling521/ExcelToDatabase.rar

包含了excel文件

Excel 导入到Datatable 中,再使用常规方法写入数据库的更多相关文章

  1. C#-导入Excel 内容到 DataTable中

    C#-导入Excel 内容到 DataTable中 直接传入文件路径,支持所有Excel格式. 缺点:如果数据量庞大会很占内存. public static DataTable ImportExcel ...

  2. Excel导入到DataTable ,DataTable导入到Excel

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using NPOI.SS. ...

  3. C#把DataTable中数据一次插入数据库的方法

    现在实际的情况是这样的: 客户有一台打卡机,员工打卡的信息全部储存在打卡机的Access数据库里面,现在客户引入了一种新的管理系统,需要将Access数据库中的打卡数据同步到SQL Server数据库 ...

  4. SqlBulkCopy将DataTable中的数据批量插入数据库中

    #region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// <summary> /// 注意:DataTable中的列需要与数据库表中的列完全一致.// ...

  5. list转datatable,SqlBulkCopy将DataTable中的数据批量插入数据库

    /// <summary> /// 将泛类型集合List类转换成DataTable /// </summary> /// <param name="list&q ...

  6. 批量插入数据, 将DataTable里的数据批量写入数据库的方法

    大量数据导入操作, 也就是直接将DataTable里的内容写入到数据库 通用方法: 拼接Insert语句, 好土鳖 1. MS Sql Server:   使用SqlBulkCopy 2. MySql ...

  7. Asp.net 模板下载和导入到DataTable中

    HTML页面: <tr> <td colspan=" style="text-align: left; border: 1px;"> <as ...

  8. 把excel导入到mysql中

    方法很多,不过建议你先看看mysql的开发文档,里面写的很详细的,如果你懒得看,可以看下面的 1.有个软件PHP Excel Parser Pro v4.2可以 2.可将Excel存成csv格式.然后 ...

  9. C# 之 Excel 导入一列中既有汉字又有数字:数字可以正常导入,汉字导入为空

    今天在做一个Excel导入功能,一切开发就绪,数据可以成功导入.导入后检查数据库发现有一列既有汉字又有数字,数字正常导入,汉字为空.但是前面同样既有汉字又有数字的列可以导入成功. 查看excel 源文 ...

随机推荐

  1. 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)

    题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...

  2. HDU3948 & 回文树模板

    Description: 求本质不同回文子串的个数 Solution: 回文树模板,学一学贴一贴啊... Code: /*================================= # Cre ...

  3. overflow:hidden清除浮动原理

    overflow:hidden的意思是超出部分去掉,如果父元素height为auto,内部元素浮动,势必会将内部元素全部隐藏,故计算出内部浮动高度顺便清除浮动.

  4. (转)什么是“黑客” by 王珢

    什么是“黑客” by 王垠很多程序员自豪的把自己叫做“黑客”(hacker),把编程叫做 hack.可是殊不知,其实在最高级的程序员眼里,“黑客”其实是一个贬义词.他们更愿意被叫做“程序员”(prog ...

  5. checkbox选中状态不被改变

    让它的状态只能看不能改变,加上onclick="return false;". 也可以disabled="true";但是这个颜色变淡了; <input ...

  6. BigDecimal用法详解

    一.简介Java在java.math包中提供的API类BigDecimal,用来对超过16位有效 位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更 ...

  7. 用C语言编写生成小学四则运算程序

    使用软件——VS 2015 使用环境——C语言 早在上周我就开始使用C#语言做,由于最后一点问题而放弃,之后用C语言开始做,很顺利,但是也碰到了一些问题,但是通过了百度文库上的一些程序的借鉴和吴阿平同 ...

  8. ant 自动化编译

    bulid.xml配置: <?xml version="1.0" encoding="UTF-8" ?> <project name=&quo ...

  9. PAT/字符串处理习题集(二)

    B1024. 科学计数法 (20) Description: 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+ ...

  10. shell条件测试test

    shell条件测试可以通过以下两种方式: test   参数    测试内容 [ 参数  测试内容 ] 一.测试文件类型: test  -e   文件名          (测试文件是否存在) [ - ...