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 源文 ...
随机推荐
- 根据oracle的主键列生成SQLserver的主键
根据oracle的主键列生成MsSQLServer的主键列 select 'alter table ' || cu.table_name ||' add constraint '||' PK_' ...
- C程序语法(无左递归)
<程序> -〉 <外部声明> | <函数定义><外部声明> -〉<头文件> | <变量> | <结构体> <头 ...
- css3控制标题字数超出的部分自动显示为“...”省略号
css3功能强大,可以让超出指定宽度的部分自动显示为"..." 代码如下 display:block;text-overflow:ellipsis;white-space:nowr ...
- Shell 快捷键
输入bind -P可以查看所有的键盘绑定 Ctrl + Shift + '-' 缩小shell框Ctrl + Shift + ‘+' 放大shell框 CTRL相关的快捷键Ctrl-A 相当于HOME ...
- java.lang.NoSuchMethodError: android.view.View.setBackground
int sdk = android.os.Build.VERSION.SDK_INT; if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { ...
- 如何发布付费WP8应用
如何发布付费应用,听起来蛮简单的,事实上也确实如此,但是发布付费WP8应用前的资料填写却让我郁闷不已. 我打开仪表板,点击进入账户--账户摘要,填写税务资料和付款账户,发现付款账户保存成功了,税务资料 ...
- 基于shell脚本比较数字加减乘除
让用户输入两个数来比较他们的大小 先用touch命令新建一个2.sh文件 在用vi进入i进入编辑状态 输入 保存后检查
- oracle 字符串分割
); create or replace function strsplit2(p_value varchar2, p_split varchar2 := ',') return str_split ...
- dictionary 应用(绑定dgv)
dictionary的用法://初始化添加所有车位进这队列 Utility.Effectlist.Add(); //每触发一次,用这个增加数量 Utility.Effectlist["Car ...
- 关于C#的微信开发的入门记录二
在准备了空间和域名之后,现在来讲讲我们接下来的编码过程: 今天就先到这里了!没有服务器那些的请看我之前的博客:http://www.cnblogs.com/zhankui/p/4515905.html ...