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 源文 ...
随机推荐
- checkbox和文本上下对齐
只需要分别给checkbox和文本加上这个样式就可以了: vertical-align:middle;
- NAIPC-2016
A. Fancy Antiques 爆搜+剪枝. #include <bits/stdc++.h> using namespace std ; typedef pair < int ...
- NOI 题库 9272 题解
9272 偶数个数字3 描述 在所有的N位数中,有多少个数中有偶数个数字3? 输入 一行给出数字N,N<=1000 输出 如题 样例输入 2 样例输出 73 Solution : 令f ( ...
- java基础学习总结-接口
原文链接:http://www.cnblogs.com/xdp-gacl/p/3651121.html 一.接口的概念 JAVA是只支持单继承的,但现实之中存在多重继承这种现象,如"金丝猴是 ...
- VS调式显示问题
调式时,发现与以前的显示不太一样,虽然也能看到结果,但不是很方便,后来网上查找到与VS中的一个文件被修改有关. 找个别人安装过的VS2005,替换Common7\Packages\Debugger\a ...
- web-inf目录和meta-inf目录
/WEB-INF/web.xml Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则. /WEB-INF/classes/ 包含了站点所有用的 class 文件,包括 se ...
- linux下安装启动rpc服务
1.上传包 rocky:~ # ls Desktop dts.xml jdk1..0_41 oswbb rpc.rstatd- rpc.rstatd-.tar.gz rocky:~ # cd rpc. ...
- 2016/11/17 周四 <javascript的封装简单示例>
这是一个简单的javascript代码封装的示例以及封装后的调用方法: var ticker={ n:0, add:function() { this.n++; }, show:function() ...
- JeeSite学习笔记~代码生成原理
1.建立数据模型[单表,一对多表,树状结构表] 用ERMaster建立数据模型,并设定对应表,建立关联关系 2.系统获取对应表原理 1.怎样获取数据库的表 genTableForm.jsp: < ...
- Android零散
2016-03-13 Android零散 ListView中嵌套GridView 要实现分组列表这样的效果:点击ListView中的分组名称,即展开此分组显示其包含的项目.使用ExpandableLi ...