使用 OLEDB 及 SqlBulkCopy 将多个不在同一文件夹下的 ACCESS mdb 数据文件导入MSSQL
注:转载请标明文章原始出处及作者信息http://www.cnblogs.com/z-huifei/p/7380388.html
前言
OLE DB 是微软的战略性的通向不同的数据源的低级应用程序接口。OLE DB不仅包括微软资助的标准数据接口开放数据库连通性(ODBC)的结构化查询语言(SQL)能力,还具有面向其他非SQL数据类型的通路。OLE DB的存在为用户提供了一种统一的方法来访问所有不同种类的数据源。OLE DB可以在不同的数据源中进行转换。利用OLE DB,客户端的开发人员在进行数据访问时只需把精力集中在很少的一些细节上,而不必弄懂大量不同数据库的访问协议。OLE DB是一套通过COM接口访问数据的ActiveX接口。这个OLE DB接口相当通用,足以提供一种访问数据的统一手段,而不管存储数据所使用的方法如何。同时,OLE DB还允许开发人员继续利用基础数据库技术的优点,而不必为了利用这些优点而把数据移出来。
接口介绍
System.Data.OleDb 下的部分成员(相信读者都很眼熟)
OleDbConnection |
表示到数据源的连接是打开。 |
OleDbCommand |
表示要对数据源执行的 SQL 语句或存储过程。 |
OleDbDataReader |
提供了一种从数据源中读取数据行的只进流。 |
OleDbDataAdapter |
表示一组数据命令和一个数据库连接,它们用于填充 System.Data.DataSet 和更新数据源。 |
...... |
...... |
SqlBulkCopy 允许使用其他源的数据有效地批量加载到 SQL Server 表(这个就是陌生了)
BatchSize |
每一批次中的行数。在每一批次结束时,将该批次中的行发送到服务器。 |
BulkCopyTimeout |
超时之前操作完成所允许的秒数。默认值为 30 秒。值 0 指示没有限制;批量复制将无限期等待。 |
ColumnMappings |
列映射定义数据源中的列和目标表中的列之间的关系。 |
DestinationTableName |
目标表的名称。 |
NotifyAfter |
定义在生成通知事件之前要处理的行数。 |
SqlRowsCopied |
事件。每次处理完 System.Data.SqlClient.SqlBulkCopy.NotifyAfter 属性指定的行数时发生。 |
WriteToServer |
将数据复制到DestinationTableName 属性指定的目标表中。 |
...... |
...... |
终于可以撸代码了
static void BulkCopy(string fileName) {
try {
string connectionString = "server=192.168.1.250;Initial Catalog=demo;user=sa;password=123;";
string strConn = $"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={fileName};";
string strCom = string.Format("select * from content");
OleDbConnection conn = new OleDbConnection(strConn);
OleDbCommand com = new OleDbCommand(strCom, conn);
conn.Open();
IDataReader reader = com.ExecuteReader();
using (SqlBulkCopy bcp = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction)) {
bcp.BatchSize = ;
//bcp.NotifyAfter = 10000;
bcp.BulkCopyTimeout = ;
//bcp.SqlRowsCopied += new SqlRowsCopiedEventHandler(bulkCopy_SqlRowsCopied);//每一批处理完触发事件
bcp.DestinationTableName = "content1";
bcp.ColumnMappings.Add("id", "id");
bcp.ColumnMappings.Add("type1", "typeA");
bcp.ColumnMappings.Add("type2", "typeB");
bcp.ColumnMappings.Add("type3", "typeC");
bcp.ColumnMappings.Add("type4", "typeD");
bcp.ColumnMappings.Add("type5", "typeE");
bcp.WriteToServer(reader);
}
reader.Close();
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
}
}
private static void bulkCopy_SqlRowsCopied(object sender, SqlRowsCopiedEventArgs e) {
count += ;
//var count = e.RowsCopied;//当前批量复制操作期间复制的行数。
Console.Clear();
Console.WriteLine($"{count}条数据已复制完成.");
}
很多时候不会只有一个数据文件,比如:


遍历取出每个文件夹下的mdb文件
static void ProRun() {
List<FileInfo> list = new List<FileInfo>();
DirectoryInfo dir = new DirectoryInfo(@"E:\XXX");
var dirInfo = dir.GetDirectories();
dirInfo.ToList().ForEach(x => {
x.GetFiles("*.mdb").ToList().ForEach(file => {
//排除不需要的文件
if (!file.Name.Equals("XXX.mdb")) {
list.Add(file);
}
});
});
list.ForEach(file => {
BulkCopy(file.FullName);
});
}
结语:可以更改为SQL,ACCESS,ORACLE,EXCEL....等数据源,因为OLE DB。
使用 OLEDB 及 SqlBulkCopy 将多个不在同一文件夹下的 ACCESS mdb 数据文件导入MSSQL的更多相关文章
- myGeneration代码生成器
转自:http://www.cnblogs.com/leitwolf/archive/2007/07/27/833255.html http://blog.csdn.net/happyhippy/ar ...
- Asp.Net 之 Web.config 配置文件详解
在asp.net中配置文件名一般默认是web.config.每个web.config文件都是基于XML的文本文件,并且可以保存到Web应用程序中的任何目录中.在发布Web应用程序时web.config ...
- ASP.NET中的配置文件
ASP.NET中的配置文件 原创 2014年10月13日 08:15:27 1199 在机房收费系统的时候曾经应用过配置文件,当时也就那么一用对配置文件了解的不是很透彻,下面就来总结一下有关配置文 ...
- 利用C#脚本来处理Excel
废不多,直入正题. 所需环境:安装了Windows操作系统和Office软件的电脑一台. 开发语言:C# 开发需求:1.利用C#脚本读取Excel .xlsx文件 2.将程序中的数据存储到.csv文件 ...
- VC++ 訪问数据库实例具体解释图解
一 ADO 方式訪问 Access 新建一个对话框project,加入控件,如图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2 ...
- 未在本地计算机上注册"microsoft.ACE.oledb.12.0"提供程序解决办法
错误信息:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序. 解决办法: 去http://download.microsoft.com/download/7/0/3/7 ...
- 从Excel中导入数据时,提示“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”的解决办法
注意,64位系统,用64位的补丁文件; https://www.cnblogs.com/A2008A/articles/2438962.html 操作系统:使用的是64位的Windows Server ...
- 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0
从Excel中导入数据时,提示“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”的解决办法 操作系统:使用的是64位的Windows Server 2008 解决办法 ...
- C# 使用OLEDB读取不同版本Excel数据的连接字符串
用OLEDB通过设置连接字符串可以像读取sqlserver一样将excel中的数据读取出来,但是excel2003和excel2007/2010的连接字符串是不同的 /// <summary&g ...
随机推荐
- mysql--mysql的安装与目录介绍
一.mysql的下载安装 1.下载安装 1.windows10下安装 我们采用绿色免安装版, 打开你的mysql文件夹中的bin目录,我的是这个样子的 将这个路径添加入系统环境变量,首先右键此电脑-- ...
- WPF Adorner 在TabControl切换TabItem时消失
错误的截图: 一开始以为是MVVM绑定的代码中出现了问题,但是通过断点追踪并没有发现问题. 通过通过VS的实时可视化树发现问题:切换Item时Adorner会在AdornerLayer直接消失.届时怀 ...
- 在Ubuntu16.04里面安装Gogland!
一,安装 把linux版本的Gogland拷贝到Ubuntu16.04里面,随后在想要存放它的地方解压缩,这样就完成了安装! 二,让Gogland可以快速启动 linux版本的Gogland的启动是用 ...
- 2018国庆YALI集训游记
想了想,像之前那样简略地叙述题意和做法,根本没讲清楚,没有任何意义,还不如写写自己的感受. 感觉YALI真的是一所挺不错的学校吧.总是能有一机房的julao轮番吊打你,总是能有集训队的奆佬来给你出dl ...
- 某种带权有向无环图(graph)的所有路径的求法
// 讨论QQ群:135202158 最近做某个东西,最后用图实现了,这里总结一下算法. 假设有以下带权有向无环图(连通或非连通,我这里用的是非连通的): 每个节点(node)可能与其他节点有向地相连 ...
- [RHEL] RHEL7.0 下 Postfix + Dovecot 实现邮件发送
RHEL7.0 下 Postfix + Dovecot 实现邮件发送 一.前言 大家都对邮件服务(mail service)很感兴趣嘛.我在自己 博客站 预言了自己会实战一次,访问量一天到十几(毕竟平 ...
- Settings app简单学习记录
Settings是android系统设置的入口.主界面由Settings.java以及settings_headers.xml构成. Settings类继承自PreferenceActivity,而P ...
- python-requests库的使用之爬取贴吧内容并保存在本地
以面向对象的程序设计方式,编写爬虫代码爬去‘李毅吧’所有页面的内容,也可以通过改变对象的参数来爬取其它贴吧页面的内容. 所用到的库为:requests 涉及知识点:python面向对象编程,字符串操作 ...
- [Alpha]Scrum Meeting#9
github 本次会议项目由PM召开,时间为4月11日晚上10点30分 时长10分钟 任务表格 人员 昨日工作 下一步工作 木鬼 撰写每日例会报告 撰写每日例会报告撰写并整理任务分配博客 SiMrua ...
- windows 虚拟机VMware 安装linux系统注意事项!!!
1.主机CPU是否支持虚拟化技术? 启动 CPUZ 软件(如下图) 注: 32位系统查看使用CPUZ_x86软件 64位系统查看使用CPUZ_x64软件 启动后 ...