Tag: bulkinsert

SqlBulkCopy会自动启动事务吗?

我通过SqlBulkCopy插入数据,如下所示: public void testBulkInsert(string connection, string table, DataTable dt) { using (SqlConnection con = new SqlConnection(connection)) { con.Open(); using (SqlBulkCopy bulkCopy = new SqlBulkCopy(con)) { bulkCopy.DestinationTableName = table; bulkCopy.WriteToServer(dt); } } } 这是否会自动包装在SQL事务中,以便在出现问题时,数据库的一半将保持与批量插入开始之前相同的状态? 或者将插入一半的数据? 即我是否有必要明确调用con.BeginTransaction 或者,如果我调用SqlBulkCopy的构造函数来获取字符串,那么这是一种更好的方法来使它在事务中发生吗? public void testBulkInsert(string connection, string table, DataTable dt) { using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection)) { bulkCopy.DestinationTableName = table; […]

批量插入Sql Server数百万条记录

我有一个Windows服务应用程序,它接收具有以下格式的数据流 IDX|20120512|075659|00000002|3|AALI |Astra Agro Lestari Tbk. |0|ORDI_PREOPEN|12 |00000001550.00|00000001291.67|00001574745000|00001574745000|00500|XDS1BXO1| |00001574745000|›§ IDX|20120512|075659|00000022|3|ALMI |Alumindo Light Metal Industry Tbk. |0|ORDI |33 |00000001300.00|00000001300.00|00000308000000|00000308000000|00500|–U3—2| |00000308000000|õÄ 这个数据有数百万行,顺序为00000002….00198562 ,我必须根据序列将它们解析并插入到数据库表中。 我的问题是,将这些数据插入我的数据库的最佳方式(最有效)是什么? 我试图使用一个简单的方法来打开一个SqlConnection对象然后生成一个SQL插入脚本字符串,然后使用SqlCommand对象执行该脚本,但是这个方法花了太长时间。 我读过我可以使用Sql BULK INSERT但它必须从文本文件中读取,这个场景是否可以使用BULK INSERT? (我之前从未使用过它)。 谢谢 更新:我知道SqlBulkCopy,但它要求我首先使用DataTable,这对性能有好处吗? 如果可能的话,我想直接从我的数据源插入到SQL Server,而不必在内存DataTable中使用。

如何在尽可能短的时间内插入1000万条记录?

我有一个文件(有1000万条记录),如下所示: line1 line2 line3 line4 ……. …… 10 million lines 所以基本上我想在数据库中插入1000万条记录。 所以我读了文件并将其上传到SQL Server。 C#代码 System.IO.StreamReader file = new System.IO.StreamReader(@”c:\test.txt”); while((line = file.ReadLine()) != null) { // insertion code goes here //DAL.ExecuteSql(“insert into table1 values(“+line+”)”); } file.Close(); 但插入需要很长时间。 如何使用C#在尽可能短的时间内插入1000万条记录? 更新1: 批量插入: BULK INSERT DBNAME.dbo.DATAs FROM ‘F:\dt10000000\dt10000000.txt’ WITH ( ROWTERMINATOR =’ \n’ ); 我的表如下: DATAs ( DatasField […]

来自List 的SqlBulkCopy

如何从简单对象的List 中使用SqlBulkCopy进行大插入? 我是否实现了自定义IDataReader?