使用SqlBulkCopy批量快速插入大量数据到SQL SERVER
来源:互联网 发布:2×3矩阵的值怎么求 编辑:程序博客网 时间:2024/05/21 17:47
现有一个文本文件,大小为8M多,有大约25W行。每一行文本为一条数据,经过简单的字符串拆分就可以获取每个字段的值。但是,如果使用常规的SqlConnection和SqlCommand来执行插入的话,25W行数据大约会花去20分钟时间,这种效率是及其低下的。
如下代码:
string[] lines = File.ReadAllLines("CellPhoneNumber.txt", Encoding.Default); string connString = @"Data Source = (local)\SqlExpress; Integrated Security = true; Initial Catalog = Test"; using (SqlConnection conn = new SqlConnection(connString)) { conn.Open(); foreach (string line in lines) { string[] tempLine = line.Split('\t'); string PreFix = tempLine[0].Trim('\"'); string Area = tempLine[1].Trim('\"'); string Type = tempLine[2].Trim('\"'); string Code = tempLine[3].Trim('\"'); string cmdString = @"INSERT INTO T_CellPhoneLocation VALUES(@PreFix,@Area,@Type,@Code)"; using (SqlCommand cmd = new SqlCommand(cmdString, conn)) { SqlParameter[] sqlParameters = new SqlParameter[] { new SqlParameter("@PreFix",PreFix), new SqlParameter("@Area",Area), new SqlParameter("@Type",Type), new SqlParameter("@Code",Code) }; cmd.Parameters.AddRange(sqlParameters); cmd.ExecuteNonQuery(); } }
但是如果使用SqlBulkCopy的话,效率会快上几百倍。但使用SqlBulkCopy需要先将待插入数据读取到内存的DataSet中,然后再一次性批量插入。
如下代码:
string connString = @"Data Source = (local)\SqlExpress; Integrated Security = true; Initial Catalog = Test"; DataTable dt = new DataTable(); dt.Columns.Add("PreFix"); dt.Columns.Add("Area"); dt.Columns.Add("Type"); dt.Columns.Add("Code"); string[] lines = File.ReadAllLines("CellPhoneNumber.txt", Encoding.Default); foreach (string line in lines) { string[] tempLine = line.Split('\t'); DataRow dr = dt.NewRow(); dr["PreFix"] = tempLine[0].Trim('\"'); dr["Area"] = tempLine[1].Trim('\"'); dr["Type"] = tempLine[2].Trim('\"'); dr["Code"] = tempLine[3].Trim('\"'); dt.Rows.Add(dr); } using (SqlBulkCopy sbc = new SqlBulkCopy(connString)) { sbc.DestinationTableName = "T_CellPhoneLocation"; sbc.ColumnMappings.Add("PreFix", "PreFix"); sbc.ColumnMappings.Add("Area", "Area"); sbc.ColumnMappings.Add("Type", "Type"); sbc.ColumnMappings.Add("Code", "Code"); sbc.WriteToServer(dt); }
前者用时25min,后者用时4second
倍数相差; 375
- 使用SqlBulkCopy批量快速插入大量数据到SQL SERVER
- .net 使用SqlBulkCopy极速插入数据到 SQL Server
- SqlBulkCopy快速批量上传大量数据到SqlServer
- sql server 利用(SqlBulkCopy) 批量插入数据
- SQLBULKCOPY批量插入数据使用
- 利用SqlBulkCopy类 批量导入数据到sql server
- 利用SqlBulkCopy类 批量导入数据到sql server
- .net 使用SqlBulkCopy极速插入数据到 SQL Server----柳永法http://www.yongfa365.com/Item/SqlBulkCopy.html
- SqlBulkCopy快速批量大数据插入
- SqlBulkCopy批量数据插入
- SqlBulkCopy批量数据插入
- SqlBulkCopy批量插入数据
- SqlBulkCopy批量数据插入
- SqlBulkCopy批量插入数据
- SqlBulkCopy批量插入数据
- 批量插入数据 C# SqlBulkCopy使用
- 批量插入数据 C# SqlBulkCopy使用
- 批量插入数据 C# SqlBulkCopy使用
- 大三第一学期总结
- PMO(プロジェクトマネジメントオフィス)を生かす_10
- linuxc__attribute__详解
- 参数关键字out,ref
- Android屏幕密度(Density)和分辨率的关系
- 使用SqlBulkCopy批量快速插入大量数据到SQL SERVER
- ubuntu12.04安装ubuntu one失败
- ASP.NET MVC HtmlHelper用法集锦
- 步步测试完善Java中Socket通信图解法(一)
- 在Oracle的函数中,返回表类型
- Oracle DUPLICATE复制数据库
- 找出两个字符串中最大公共子字符串
- 谈谈大型网站的负载均衡器、db proxy和db
- ASP.NET MVC3 Razor 调试与预加载