注:转截请标出文章内容初始出處及创作者信息内容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 = 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}条数据已拷贝进行.");
        }

许多 情况下不容易只有一个数据文档,例如:

  使用 OLEDB 及 SqlBulkCopy 将多个不在同一文件… sql 语句 数据库 第1张使用 OLEDB 及 SqlBulkCopy 将多个不在同一文件… sql 语句 数据库 第2张

 解析xml取下每一个文件夹名称下的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。