使用 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 ...
随机推荐
- 谈一谈PHP计划任务
公司所用计划任务均是大概这样子的: */ * * * * root cd /opt/xxxx/test_S1/html/xxxx/admin; php index.php task testOne & ...
- 【OCP-12c】CUUG 071题库考试原题及答案解析(15)
15.(6-24)choose the best answerExamine the structure of the MEMBERS table:You want to display detail ...
- Python Pymongo中Connection()与MongoClient()差异
在git找了几个blog的源码,在学习的过程中,发现有人使用Connection(),有人却在使用MongoClient(),那么到底两者有什么差别呢? 且看分析如下: db = Connection ...
- AngularJS源码解析2:注入器的详解
上一课,没有讲createInjector方法,只是讲了它的主要作用,这一课,详细来讲一下这个方法.此方法,最终返回的注册器实例对象有以下几个方法: invoke, instantiate, get, ...
- (一)Python装饰器的通俗理解
在学习Python的过程中,我相信有很多人和我一样,对Python的装饰器一直觉得很困惑,我也是困惑了好久,并通过思考和查阅才能略有领悟,我希望以下的内容会对你有帮助,我也努力通过通俗的方式使得对Py ...
- 数学规划求解器lp_solve超详细教程
前言 最近小编学了运筹学中的单纯形法.于是,很快便按奈不住跳动的心.这不得不让我拿起纸和笔思考着,一个至关重要的问题:如何用单纯形法装一个完备的13? 恰巧,在我坐在图书馆陷入沉思的时候,一位漂亮的小 ...
- javascript举例介绍事件委托的典型使用场景
在了解什么是DOM事件以及给DOM事件绑定监听器的几种方法后,我们来谈谈事件委托. 1. e.target 和 e.currentTarget 当我们给目标元素target 绑定一个事件监听器targ ...
- Web安全篇之SQL注入攻击
在网上找了一篇关于sql注入的解释文章,还有很多技术,走马观花吧 文章来源:http://www.2cto.com/article/201310/250877.html ps:直接copy,格式有点问 ...
- shell-008:检测502
检测502的方法有多种 1.curl他的状态码(不建议,会对网站造成不必要的访问和多余的日志输出) 2.可以直接检测访问日志 下面用while做成一个死循环监控日志502的状态 #!/bin/bash ...
- 解决TeamViewer无法按给定网络地址联系伙伴
说明:这种现象一般是断网后DNS改变了,或者路由重启了没有重启网络配合导致的. 解决方法: 1.Windows: ipconfig /flushdns 2.Linux: /etc/rc.d/init. ...