使用 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 ...
随机推荐
- CSS3-渐变这个属性2
渐变 有了渐变再也不用去切1px的图再重复了.. -webkit- 是浏览器前缀, 表示特定浏览器对一个属性还在实验阶段, 在这里顺便写下各个浏览器的前缀: chrome/ safari -w ...
- LOJ#3084. 「GXOI / GZOI2019」宝牌一大堆(递推)
题面 传送门 题解 为什么又是麻将啊啊啊!而且还是我最讨厌的爆搜类\(dp\)-- 首先国士无双和七对子是可以直接搞掉的,关键是剩下的,可以看成\(1\)个雀头加\(4\)个杠子或面子 直接\(dp\ ...
- 洛谷P5282 【模板】快速阶乘算法(多项式多点求值+MTT)
题面 传送门 前置芝士 \(MTT\),多项式多点求值 题解 这题法老当初好像讲过--而且他还说这种题目如果模数已经给定可以直接分段打表艹过去 以下是题解 我们设 \[F(x)=\prod_{i=0} ...
- Error: Cannot find module 'gulp-sass'
刚才首次启动ionic的时候,给我报了个这:Error: Cannot find module 'gulp-sass' 应该是缺少gulp-sass模块了,可又不敢贸然装,直接百度: stackove ...
- 1.2 Percona XtraDB Cluster Limitations
摘要: 出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎转载,但请保留该 ...
- K8s的POD连接数据库时报错
[root@cccc xxxx]# ./showlog.sh dr iff-dr-1128668949-lb90g 2017-09-29 03:21:57,575 INFO [org.wildfly. ...
- QuantLib 金融计算——数学工具之数值积分
目录 QuantLib 金融计算--数学工具之数值积分 概述 常见积分方法 高斯积分 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--数学工具之数值积分 载入模 ...
- jquery text html width heigth的用法
<body> <div id="div1"> <h3>我是标题</h3> </div> <div id=" ...
- jsp页面struts2标签展示clob类型的数据
直接从数据库中查出来的数据,是clob类型的在前端页面展示的时候是这样: 后来找到了一个方法,在action中添加一个方法,解析转换clob数据的方法 public String getClob(Cl ...
- geatpy - 遗传和进化算法相关算子的库函数(python)
Geatpy The Genetic and Evolutionary Algorithm Toolbox for Python Introduction Website (including doc ...