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 源文 ...
随机推荐
- BestCoder#49
Untitled Accepts: 504 Submissions: 1542 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/6 ...
- React虚拟DOM浅析
在Web开发中,需要将数据的变化实时反映到UI上,这时就需要对DOM进行操作,但是复杂或频繁的DOM操作通常是性能瓶颈产生的原因,为此,React引入了虚拟DOM(Virtual DOM)的机制. 什 ...
- Java 实现HTML富文本导出至word完美解决方案
一. 问题的提出 最近用java开发一个科技项目信息管理系统,里面有一个根据项目申请书的模板填写项目申报信息的功能,有一个科技项目申请书word导出功能. 已有的实现方式:采用标准的jsp模板输出实现 ...
- 【ORACLE】字符串操作 B字符串时A的一部分
select * from a where instr(a,b)>0;用于实现B字段是A字段中的某一部分的时候,要论顺序或者要相邻的字符. 如果想要不论顺序或者不相邻的字符时,定义函数可以实现: ...
- 腾讯网2016回响中国:华清远见荣获2016年度知名IT培训品牌
12月1日,由腾讯网主办的“2016回响中国·腾讯网教育年度盛典”上,揭晓了“2016腾讯网教育年度总评榜”榜单.高端IT就业培训专家——华清远见教育集团凭借自身优质的高薪IT就业服务优势成功入围,荣 ...
- Ejabberd导入到eclipse
ejabberd 在eclipse(erlide)中的配置.调试.运行 最近在折腾ejabberd,将ejabberd项目配置到eclipse中进行编译.调试等,现在将过程记下来,希望能帮助到需要 ...
- Total Commander解压位置
TC解压到当前文件夹下 TC也是用了一段时间,现在勉强也算用习惯了,今天在解压文件的时候感觉步骤麻烦,之前解压都是解压到另一个窗口,所以一直是ALT+8同步窗口,然后解压文件.但一般解压文件都是解压到 ...
- #iOS问题记录#关于NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9801)
响应Apple的号召,将APP里的HTTP请求全部升级为HTTPS,一切配置OK,正常的请求也没问题: 但,当使用SDwebImg缓存图片时,遇到了标题写的问题: 根据资料得: 这个问题的出现是因为i ...
- angurlarjs学习笔记
AngularJS 根作用域($rootScope) 所有的应用都有一个 $rootScope,它可以作用在 ng-app 指令包含的所有 HTML 元素中 $rootScope 可作用于整个应用中. ...
- Intellij IDEA 常用快捷键
[常规] Ctrl+Shift + Enter,语句完成 "!",否定完成,输入表达式时按 "!"键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更 ...