【数据传输 2】批量导入的前奏:将Excel表中的数据转换为DataTable类型
导读:我们知道,在数据库中,数据集DataSet是由多张DataTable表组成。所以,如果我们需要将数据从外部导入到数据库中,那么要做的很重要的一步是将这些数据转换为数据库可以接受的结构。今天在用SQLBulkCopy 实现不同数据库服务器之间的数据导入时,其中有一个很重要的点:所有能够转成DataSet或者DataTable的数据,都可以使用SQLBulkCopy去实现批量导入......现在,就介绍这第一步,将Excel表中的数据转换为DataTable类型。
一、基础概述
如何定义表结构
目的:在实现代码中本来事先定义的是DataSet,后来取出数据填充了DataTable,帮助理解这一个过程。
刚开始创建的表没有表结构,要定义表的结构,必须创建DataColumn对象并将其添加到表的Columns集合中。在为DataTable定义了结构之后,通过DataRow对象将数据添加到表的Rows集合中。如:
将数据写入DataSet:
<span style="font-family:KaiTi_GB2312;font-size:18px;">//创建一个新的空班级DataSet
DataSet dsClass = new DataSet();
//创建班级表
DataTable dtClass = new DataTable("Class");
//创建班级名称列
DataColumn dcClassName = new DataColumn("ClassName",typeof(string));
className.MaxLength = 50;
//创建年级ID列
DataColumn dcGradeID = new DataColumn(GradeID",typeof(int));
//将定义好列添加到班级表中
dtClass.Columns.Add(dcClassName);
dtClass.Columns.Add(dcGradeID);
//将班级表添加到DataSet中
dsClass.Tables.Add(dtClass);</span>
将数据从DataSet里面取出
从DataSet中获取数据有两种方式:
<span style="font-family:KaiTi_GB2312;font-size:18px;">
1.第一种方式是通过指定DataSet中的具体DataTable的某行某列来获取数据。
步骤:
1.通过表名,从DataSet中获取指定的DataTable
2.通过索引,从DataTable中获取指定的DataRow
3.通过列名,从DataRow中获取指定列的数据
例:
//得到班级名称
dsClass.Table["Class"].Row[0]["ClassName"];
//得到年级ID
dsClass.Tables["Class"].Row[0]["GradeID"] </span>
2.另一种方式是将DataSet中的数据直接绑定到数据展示控件上。如:DataGrid等
二、实现代码
2.1,主方法(简单实现)
注意:这个方法只是简单实现,并没有做过多的细节处理,如:上传文件的大小限制,扩展名的处理等。
<span style="font-family:KaiTi_GB2312;font-size:18px;"> /// <summary>
/// 将Excel表中的数据转换为DataTable
/// </summary>
/// <param name="path">源文件路径</param>
/// <returns></returns>
public DataTable invertTotable(string path)
{
string strMessage = string.Empty;
Response.Buffer = true;
Response.Clear();
Response.Flush();
DataTable dt = null;
//关键的连接语句 HDR=yes 第一列为列名
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\""; DataSet ds = new DataSet();
OleDbDataAdapter oada = new OleDbDataAdapter("select * from [Sheet1$]", strConn);
oada.Fill(ds);
if (ds.Tables.Count > 0)
{
dt = ds.Tables[0];
Response.Write("Excel数据加载完毕!");
Response.Flush();
}
else {
Response.Write("Excel数据加载失败!");
}
return dt;
}</span>
2.2,后台触发事件
<span style="font-family:KaiTi_GB2312;font-size:18px;"> protected void Button1_Click(object sender, EventArgs e)
{
string path = Request.Form["myFile"].ToString();
//string strUserPath = AppDomain.CurrentDomain.BaseDirectory + path;
//查了很多方法没能实现直接获取文件地址,本次实验在于封装Excel转换为DataTable,所以没有做过多的纠结,先写死
string path1 = "C:\\Users\\10283\\Desktop\\" + path;
GridView1.DataSource = invertTotable(path1);
GridView1.DataBind();
}</span>
2.3,前台页面代码
<span style="font-family:KaiTi_GB2312;font-size:18px;"><%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestExcel.aspx.cs" Inherits="TestExcel.TestExcel" %> <!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>将Excel转换为datatable</title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server"></asp:GridView>
<br/>
<input id="File1" type="file" name="myFile"/>
<asp:Button ID="Button1" runat="server" Text="导入" OnClick="Button1_Click" />
</form>
</body>
</html></span>
2.4,实现效果
三、主方法说明
3.1,需要引入的命名空间
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Data.Sql;
3.2,未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
这是由于本地的Office版本和程序中要求的版本不统一,需要下载数据库连接组件安装,进行注册表注册。下载地址:http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe
3.3,文件与要求的格式不统一
导入的文件必须是标准的XLS或者是XLSX文件,否则将会导致程序运行失败。
四、总结反思
上午在进行批量导入的时候,有一个疑问,如果是多张表导入呢?事实上,通过DataSet可以合并多个DataTable表,所以,先将Excel表都转成DataTable类型,再和并这些DataTable就可以解决。
更多实现:http://blog.csdn.net/lmdcszh/article/details/8625083
【数据传输 2】批量导入的前奏:将Excel表中的数据转换为DataTable类型的更多相关文章
- vlookup函数基本使用--如何将两个Excel表中的数据匹配;excel表中vlookup函数使用方法将一表引到另一表
vlookup函数基本使用--如何将两个Excel表中的数据匹配:excel表中vlookup函数使用方法将一表引到另一表 一.将几个学生的籍贯匹配出来‘ 二.使用查找与引用函数 vlookup 三. ...
- Jmeter----读取excel表中的数据
Jmeter 读取excel数据使用的方法是使用CSV Data Set Config参数化,之后使用BeanShell Sampler来读取excel表中的数据 第一步.查看所需的接口都要哪些字段和 ...
- 复制excel表,往excel表中写入数据
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import jav ...
- 【PHP】将EXCEL表中的数据轻松导入Mysql数据表
在网络上有不较多的方法,在此介绍我已经验证的方法. 方法一.利用EXCEL表本身的功能生成SQL代码 ①.先在“phpmyadmin”中建立数据库与表(数据库:excel,数据表:excel01,字段 ...
- 将EXCEL表中的数据轻松导入Mysql数据表
转载自:http://blog.163.com/dielianjun@126/blog/static/164250113201042310181431/ 在网络上有不较多的方法,在此介绍我已经验证的方 ...
- 将Excel表中的数据导入MySQL数据库
原文地址: http://fanjiajia.cn/2018/09/26/%E5%B0%86Excel%E8%A1%A8%E4%B8%AD%E7%9A%84%E6%95%B0%E6%8D%AE%E5% ...
- Python xlrd模块读取Excel表中的数据
1.xlrd库的安装 直接使用pip工具进行安装(当然也可以使用pycharmIDE进行安装,这里就不详述了) pip install xlrd 2.xlrd模块的一些常用命令 ①打开excel文件并 ...
- sql server数据库将excel表中的数据导入数据表
一般有两种方法可以实现,一种是直接写sql语句,另外一种是利用sqlserver的管理工具实现.这里介绍的是后面一种方法. 步骤: 一.准备数据 1.将excel表另存为文本格式,注意文本格式需为ta ...
- 将Excel表中的数据导入到数据库
网上查到的有参考价值的就一家,自己调试发现可行.感谢原创文章:将Excel中数据导入数据库(一) using System; using System.Collections.Generic; usi ...
随机推荐
- h5-15-svg格式图片
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- JAVA常用知识总结(五)——Linux
简单介绍一下 Linux 文件系统? 在Linux操作系统中,所有被操作系统管理的资源,例如网络接口卡.磁盘驱动器.打印机.输入输出设备.普通文件或是目录都被看作是一个文件. 也就是说在LINUX系统 ...
- 百度地图API简单初始化
<script src="http://api.map.baidu.com/api?key=&v=2.0&ak=youkey"></script& ...
- AJPFX浅谈Java 性能优化之字符串过滤实战
★一个简单的需求 首先描述一下需求:给定一个 String 对象,过滤掉除了数字(字符'0'到'9')以外的其它字符.要求时间开销尽可能小.过滤函数的原型如下: String filter(Strin ...
- 死磕 java并发包之AtomicInteger源码分析
问题 (1)什么是原子操作? (2)原子操作和数据库的ACID有啥关系? (3)AtomicInteger是怎么实现原子操作的? (4)AtomicInteger是有什么缺点? 简介 AtomicIn ...
- canvas基础绘制-绚丽时钟
效果图: 与canvas基础绘制-绚丽倒计时的代码差异: // var endTime = new Date();//const声明变量,不可修改,必须声明时赋值: // endTime.setTim ...
- 设计 REST API 的13个最佳实践
写在前面 之所以翻译这篇文章,是因为自从成为一名前端码农之后,调接口这件事情就成为了家常便饭,并且,还伴随着无数的争论与无奈.编写友好的 restful api 不论对于你的同事,还是将来作为第三方服 ...
- LINUX 安装tsung 对OPENFIRE 进行压力测试
参考资料: http://www.centoscn.com/image-text/install/2014/0818/3503.html http://my.oschina.net/jieluck ...
- swift版本拼图游戏项目源码
现学现做的第一个swift版本拼图游戏demo 常规模式,对换模式任你选择, 用到了花瓣的API,各种萌妹子~
- win7系统 windows update 总是更新失败解决方法:
win7系统 windows update 总是更新失败解决方法: 右键单击桌面“计算机”选择“管理“. 进到“计算机管理“窗口后,展开”服务和应用程序“并双击”服务“,在窗口右侧按照名称找到”Win ...