首先呢?要看你的电脑的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. iOS 使点击事件穿透透明的UIView

    如图: 悬浮的三个按钮下方有一个可以点击的灰色区域,但是点击按钮之间的透明区域, 这三个按钮的contentView会响应这个点击事件,这时候需要让这个contentView不响应这个点击事件. 解决 ...

  2. Ancient Printer[HDU3460]

    Ancient Printer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Tot ...

  3. VB6与VB.NET对照表

    VB6与VB.NET对照表 VB6.0 VB.NET AddItem Object名.AddItem Object名.Items.Add ListBox1.Items.Add ComboBox1.It ...

  4. excel使用总结

    单元格拆分:选中列-->数据-->分列 常用函数: clean 清除文本中不能打印的字符 countif,countifs,在指定区域中按指定条件对单元格进行计数(单条件计数,多条件计数) ...

  5. C# 使用access,报错:标准表达式中数据类型不匹配

    最初以为是数字类型造成的,结果最后才发现是日期格式错误,这是我的参数 db.AddInParameter(dbCommand, "savedate", DbType.DateTim ...

  6. Linux 环境变量 设置 etc profile

    一.Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1.永久的:需要修改配置文件,变量永久生效. 2.临时的:使用export命令声明即可,变量在关闭shell时失效. 二. ...

  7. [CSS]textarea设置下划线格式

    功能要求:1:如何实现在多行文本框textarea里面每一行下面都有一条横线  2:textarea文本框里面有一段不能删掉 实现方法:横线用背景图片来做,不动的文字用浮动层+给textarea增加t ...

  8. 利用js来实现文字的滚动(也就是我们常常见到的新闻版块中的公示公告)

    首先先看一下大致效果图(因为是动态的,在页面无法显示出来) 具体的实现代码如下: 1.首先是css代码: <style type="text/css"> body,ul ...

  9. Android课程---远程服务器存储

    在使用Volley进行获取数据时,需要事先准备环境:在libs里面导入一个Volley.jar包,在网上都有,可以下载下来导入,或者自己电脑上有DT的,自己合成一个包也行. WebActivity.j ...

  10. 浅析 Linux 初始化 init 系统

    近年来,Linux 系统的 init 进程经历了两次重大的演进,传统的 sysvinit 已经逐渐淡出历史舞台,新的 UpStart 和 systemd 各有特点,越来越多的 Linux 发行版采纳了 ...