注:转载请标明文章原始出处及作者信息
OLE DB 是微软的战略性的通向不同的数据源的低级应用程序接口。OLE DB不仅包括微软资助的标准数据接口开放数据库连通性(ODBC)的结构化查询语言(SQL)能力,还具有面向其他非SQL数据类型的通路。OLE DB的存在为用户提供了一种统一的方法来访问所有不同种类的数据源。OLE DB可以在不同的数据源中进行转换。利用OLE DB,客户端的开发人员在进行数据访问时只需把精力集中在很少的一些细节上,而不必弄懂大量不同数据库的访问协议。OLE DB是一套通过COM接口访问数据的ActiveX接口。这个OLE DB接口相当通用,足以提供一种访问数据的统一手段,而不管存储数据所使用的方法如何。同时,OLE DB还允许开发人员继续利用基础数据库技术的优点,而不必为了利用这些优点而把数据移出来。
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 = 1000; //bcp.NotifyAfter = 10000; bcp.BulkCopyTimeout = 3600; //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 += 10000; //var count = e.RowsCopied;//当前批量复制操作期间复制的行数。 Console.Clear(); Console.WriteLine($"{count}条数据已复制完成."); }
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。