使用 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 ...
随机推荐
- 决定以后再做公司的项目的时候,能够用其他语言的绝对不用delphi
1.delphi7的IDE真的很不友好 2.delphi7的控件有的有问题 3.delphi7居然不支持结构体的泛型存储 4.网上的解决文档超少,一些小bug,就要折腾半天 5.pascal语法太过结 ...
- Java_IO流输入输出
第三章 输入输出 一.I/O Input/Output 二.File 用途:对文件和目录进行常规操作(除文件读写操作外). 方法:exists():判断文件或目录是否存在 isFile():判断是否是 ...
- 真机测试 Thnetwork connection was lost. No profiles for 'xxx' were found: Xcode couldn't find a provisioning profile matching 'xxx'. Code signing is required for product type
最近接手了一个新项目,是从外包接手的,结果出现了很多问题,真的很崩溃,崩溃,吐槽一下 问题一:一直请求不到数据,因为外包只做了一版,上架的这个版本是可以显示数据的,但是给我的项目是没有数据的,因为并没 ...
- setInterval(),setTimeout(),location.reload(true)
1,setInterval() setInterval()方法可以按照指定的周期来调用函数或表达式,他会不停地调用函数,直到调用clearInterval()方法或窗口关闭.由setInterval( ...
- mxonline实战16:首页配置和xadmin进阶,Ueditor
对应github地址:第16天 一. 首页配置 1. courses/models.py -->class Course增加字段,迁移数据库
- 3.2 Multi-Master Replication
摘要: 出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎转载,但请保留该 ...
- 使用hexo+coding搭建免费个人博客
1.检测node和npm 先检测一下有没有node.js和npm $ node -v //如果有,说明node.js安装成功! $ node -v v8.4.0 //如果有,说明npm安装成功! $n ...
- Oracle数据库学习(四):学习中的遇到的问题
一.xhost图形化界面安装问题 问题1:运行xhost +命令,出现命令没有找到错误 原因:Linux系统没有安装xhost图形化包. 解决办法:安装xhost图形化包,命令如下: yum what ...
- ThreadLocal系列(三)-TransmittableThreadLocal的使用及原理解析
ThreadLocal系列(三)-TransmittableThreadLocal的使用及原理解析 上一篇:ThreadLocal系列(二)-InheritableThreadLocal的使用及原理解 ...
- 洛谷P2051 [AHOI2009]中国象棋(dp)
题面 luogu 题解 \(50pts:\)显然是\(3\)进制状压\(dp\) \(100pts:\) 一行一行地考虑 \(f[i][j][k]\)表示前\(i\)行,有\(j\)列放了一个,有\( ...