C# 通过DataTable插入大量数据,50万数据只需要3秒
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 通过DataTable插入大量数据,50万数据只需要3秒相关的知识,希望对你有一定的参考价值。
数据库sql脚本:
CREATE DATABASE TESTDB GO USE TESTDB GO CREATE TABLE TAB1 ( NAME NVARCHAR(10), AGE NVARCHAR(10) , ADRESS NVARCHAR(10) ) delete TAB1 SELECT * FROM TAB1 SELECT COUNT(0) FROM TAB1
class Program { static void Main(string[] args) { string conn = "Data Source=.;Initial Catalog=TESTDB;user id=sa;password=123456"; DataTable dt = new DataTable(); dt.Columns.Add("Name1"); dt.Columns.Add("Age"); dt.Columns.Add("Adress"); for (int i = 0; i < 500000; i++) { dt.Rows.Add("Name" + i, i, "地址" + i); } DataTableToSQLServer(dt, conn, "TAB1"); } public static void DataTableToSQLServer(DataTable dt, string connectionString, string tableName) { System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); using (SqlConnection destinationConnection = new SqlConnection(connectionString)) { destinationConnection.Open(); using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection)) { try { bulkCopy.DestinationTableName = tableName;//要插入的表的表名 bulkCopy.BatchSize = dt.Rows.Count; bulkCopy.ColumnMappings.Add("Name1", "NAME");//映射字段名 DataTable列名 ,数据库 对应的列名 bulkCopy.ColumnMappings.Add("Age", "AGE"); bulkCopy.ColumnMappings.Add("Adress", "ADRESS"); bulkCopy.WriteToServer(dt); Console.WriteLine("插入成功!"); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { if (destinationConnection.State == ConnectionState.Open) { destinationConnection.Close(); } stopwatch.Stop(); Console.WriteLine("插入:" + dt.Rows.Count + "数据,耗时" + (stopwatch.ElapsedMilliseconds / 1000).ToString() + "秒"); } } } } }
以上是关于C# 通过DataTable插入大量数据,50万数据只需要3秒的主要内容,如果未能解决你的问题,请参考以下文章
在 C# 中序列化 DataTable 会占用大量内存 - 如何改进这一点
在C#中进行DataTable操作:根据列数据插入一些汇总行
使用 DataTable 中的 OracleDataAdapter 更新记录并将记录插入 Oracle 表