Excel 导入到Datatable 中,再使用常规方法写入数据库
首先呢?要看你的电脑的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 测试页面的代码:
简单的布局,主要看功能:
- <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ExcelTodatabase.aspx.cs" Inherits="ExcelToDatabase.ExcelTodatabase" %>
- <!DOCTYPE html>
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head runat="server">
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- <title></title>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- <asp:FileUpload ID="Excelfile" runat="server" />
- <asp:Button ID="btnFileUp" runat="server" Text="提交" OnClick="btnFileUp_Click" />
- <br />
- <br />
- <br />
- <asp:GridView ID="gvExcel" runat="server">
- </asp:GridView>
- <br />
- <br />
- <asp:Label ID="debug" runat="server" Text="Label"></asp:Label>
- <br />
- </div>
- </form>
- </body>
- </html>
5 主要功能:
5.1 导入文件
5.2 将excel导入datatable
5.3 将datatable 写入数据库
完整的代码:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Data;
- using System.Data.SqlClient;
- using System.Data.OleDb;
- using System.IO;
- using System.Configuration;
- namespace ExcelToDatabase
- {
- public partial class ExcelTodatabase : System.Web.UI.Page
- {
- // 连接字符串
- private static string connString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
- protected void Page_Load(object sender, EventArgs e)
- {
- }
- protected void btnFileUp_Click(object sender, EventArgs e)
- {
- if (Excelfile.HasFile)
- {
- //检查文件扩展名
- string filename = Path.GetFileName(Excelfile.PostedFile.FileName);
- //debug.Text = filename;
- string extension = Path.GetExtension(Excelfile.PostedFile.FileName);
- //debug.Text = extension;
- if (extension != ".xlsx")
- {
- Response.Write("<script>alert('抱歉!您上传的不是有效的Excel文件')</script>");
- }
- else
- {
- //首先保存到服务器上
- string newFileName = "excel"+DateTime.Now.ToString("yyyyMMddHHmmssfff");
- string savePath = "ExcelFiles/"+newFileName;
- Excelfile.PostedFile.SaveAs(Server.MapPath(savePath)+extension);
- //debug.Text = Server.MapPath(savePath) + extension;
- //这里可以导入数据了
- string fileUrl = Server.MapPath(savePath) + extension;
- DataTable dt = GetExcel(fileUrl);
- gvExcel.DataSource = dt;
- gvExcel.DataBind();
- //写入数据库
- bool addToDb = InsertDb(dt);
- if (addToDb)
- {
- Response.Write("<script>alert('写入数据库成功')</script>");
- }
- else
- {
- Response.Write("<script>alert('抱歉!写入失败')</script>");
- }
- }
- }
- else
- {
- Response.Write("<script>alert('抱歉!您还没上传文件')</script>");
- }
- }
- /// <summary>
- /// 根据文件名来导入excel到datatable
- /// </summary>
- /// <param name="fileUrl"></param>
- /// <returns></returns>
- public DataTable GetExcel(string fileUrl)
- {
- const string cmdText = "Provider=Microsoft.Ace.OleDb.12.0;Data Source={0};Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";
- DataTable dt = null;
- OleDbConnection conn = new OleDbConnection(string.Format(cmdText, fileUrl));
- try
- {
- //打开连接
- if (conn.State == ConnectionState.Broken || conn.State == ConnectionState.Closed)
- {
- conn.Open();
- }
- DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
- //获取Excel的第一个Sheet名称
- string sheetName = schemaTable.Rows[]["TABLE_NAME"].ToString().Trim();
- //查询sheet中的数据
- string strSql = "SELECT * FROM [" + sheetName + "]";//sql语句,可以修改
- OleDbDataAdapter da = new OleDbDataAdapter(strSql, conn);
- DataSet ds = new DataSet();
- da.Fill(ds);
- dt = ds.Tables[];
- return dt;
- }
- catch (Exception)
- {
- throw;
- }
- }
- public bool InsertDb(DataTable dt)
- {
- int result=;
- //1 首先是要 定义好字段
- string name = "";
- string money = "";
- //遍历存在的表格
- foreach (DataRow dr in dt.Rows)
- {
- name = dr["name"].ToString().Trim();
- money = dr["money"].ToString().Trim();
- string sql = String.Format("insert into test(name,money)values('{0}','{1}')",name,money);//sql语句,测试用的
- using (SqlConnection conn=new SqlConnection(connString))
- {
- conn.Open();
- SqlCommand cmd = new SqlCommand(sql,conn);
- result = cmd.ExecuteNonQuery();
- }
- }
- if (result>)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- }
- }
实际运行的页面
数据库中内容:
简单的过程就是这样了。。
难度在于几个错误
1 未在本机计算机注册.............解决:看开头介绍的
2 其他的一些错误暂且未发现与程序相关的。可以自行解决。
完整项目下载地址:http://files.cnblogs.com/files/fanling521/ExcelToDatabase.rar
包含了excel文件
Excel 导入到Datatable 中,再使用常规方法写入数据库的更多相关文章
- C#-导入Excel 内容到 DataTable中
C#-导入Excel 内容到 DataTable中 直接传入文件路径,支持所有Excel格式. 缺点:如果数据量庞大会很占内存. public static DataTable ImportExcel ...
- Excel导入到DataTable ,DataTable导入到Excel
using System; using System.Collections.Generic; using System.Linq; using System.Text; using NPOI.SS. ...
- C#把DataTable中数据一次插入数据库的方法
现在实际的情况是这样的: 客户有一台打卡机,员工打卡的信息全部储存在打卡机的Access数据库里面,现在客户引入了一种新的管理系统,需要将Access数据库中的打卡数据同步到SQL Server数据库 ...
- SqlBulkCopy将DataTable中的数据批量插入数据库中
#region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// <summary> /// 注意:DataTable中的列需要与数据库表中的列完全一致.// ...
- list转datatable,SqlBulkCopy将DataTable中的数据批量插入数据库
/// <summary> /// 将泛类型集合List类转换成DataTable /// </summary> /// <param name="list&q ...
- 批量插入数据, 将DataTable里的数据批量写入数据库的方法
大量数据导入操作, 也就是直接将DataTable里的内容写入到数据库 通用方法: 拼接Insert语句, 好土鳖 1. MS Sql Server: 使用SqlBulkCopy 2. MySql ...
- Asp.net 模板下载和导入到DataTable中
HTML页面: <tr> <td colspan=" style="text-align: left; border: 1px;"> <as ...
- 把excel导入到mysql中
方法很多,不过建议你先看看mysql的开发文档,里面写的很详细的,如果你懒得看,可以看下面的 1.有个软件PHP Excel Parser Pro v4.2可以 2.可将Excel存成csv格式.然后 ...
- C# 之 Excel 导入一列中既有汉字又有数字:数字可以正常导入,汉字导入为空
今天在做一个Excel导入功能,一切开发就绪,数据可以成功导入.导入后检查数据库发现有一列既有汉字又有数字,数字正常导入,汉字为空.但是前面同样既有汉字又有数字的列可以导入成功. 查看excel 源文 ...
随机推荐
- iOS 使点击事件穿透透明的UIView
如图: 悬浮的三个按钮下方有一个可以点击的灰色区域,但是点击按钮之间的透明区域, 这三个按钮的contentView会响应这个点击事件,这时候需要让这个contentView不响应这个点击事件. 解决 ...
- Ancient Printer[HDU3460]
Ancient Printer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Tot ...
- VB6与VB.NET对照表
VB6与VB.NET对照表 VB6.0 VB.NET AddItem Object名.AddItem Object名.Items.Add ListBox1.Items.Add ComboBox1.It ...
- excel使用总结
单元格拆分:选中列-->数据-->分列 常用函数: clean 清除文本中不能打印的字符 countif,countifs,在指定区域中按指定条件对单元格进行计数(单条件计数,多条件计数) ...
- C# 使用access,报错:标准表达式中数据类型不匹配
最初以为是数字类型造成的,结果最后才发现是日期格式错误,这是我的参数 db.AddInParameter(dbCommand, "savedate", DbType.DateTim ...
- Linux 环境变量 设置 etc profile
一.Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1.永久的:需要修改配置文件,变量永久生效. 2.临时的:使用export命令声明即可,变量在关闭shell时失效. 二. ...
- [CSS]textarea设置下划线格式
功能要求:1:如何实现在多行文本框textarea里面每一行下面都有一条横线 2:textarea文本框里面有一段不能删掉 实现方法:横线用背景图片来做,不动的文字用浮动层+给textarea增加t ...
- 利用js来实现文字的滚动(也就是我们常常见到的新闻版块中的公示公告)
首先先看一下大致效果图(因为是动态的,在页面无法显示出来) 具体的实现代码如下: 1.首先是css代码: <style type="text/css"> body,ul ...
- Android课程---远程服务器存储
在使用Volley进行获取数据时,需要事先准备环境:在libs里面导入一个Volley.jar包,在网上都有,可以下载下来导入,或者自己电脑上有DT的,自己合成一个包也行. WebActivity.j ...
- 浅析 Linux 初始化 init 系统
近年来,Linux 系统的 init 进程经历了两次重大的演进,传统的 sysvinit 已经逐渐淡出历史舞台,新的 UpStart 和 systemd 各有特点,越来越多的 Linux 发行版采纳了 ...