架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 30308|回复: 9

[控制台程序] c#通过DataTable插入大量数据,50万数据只需要3秒

[复制链接]
发表于 2016-10-28 16:55:40 | 显示全部楼层 |阅读模式
QQ截图20161028165303.jpg

数据库sql脚本:

  1. CREATE DATABASE TESTDB
  2. GO
  3. USE TESTDB
  4. GO

  5. CREATE TABLE TAB1
  6. (
  7.         NAME NVARCHAR(10),
  8.         AGE NVARCHAR(10) ,
  9.         ADRESS NVARCHAR(10)
  10. )
  11. delete  TAB1

  12. SELECT * FROM TAB1
  13. SELECT COUNT(0) FROM TAB1
复制代码


控制台代码:

  1. class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             string conn = "Data Source=.;Initial Catalog=TESTDB;user id=sa;password=123456";
  6.             DataTable dt = new DataTable();
  7.             dt.Columns.Add("Name1");
  8.             dt.Columns.Add("Age");
  9.             dt.Columns.Add("Adress");
  10.             for (int i = 0; i < 500000; i++)
  11.             {
  12.                 dt.Rows.Add("Name" + i, i, "地址" + i);
  13.             }
  14.             DataTableToSQLServer(dt, conn, "TAB1");
  15.         }

  16.         public static void DataTableToSQLServer(DataTable dt, string connectionString, string tableName)
  17.         {
  18.             System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
  19.             stopwatch.Start();
  20.             using (SqlConnection destinationConnection = new SqlConnection(connectionString))
  21.             {
  22.                 destinationConnection.Open();
  23.                 using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection))
  24.                 {
  25.                     try
  26.                     {
  27.                         bulkCopy.DestinationTableName = tableName;//要插入的表的表名
  28.                         bulkCopy.BatchSize = dt.Rows.Count;
  29.                         bulkCopy.ColumnMappings.Add("Name1", "NAME");//映射字段名 DataTable列名 ,数据库 对应的列名  
  30.                         bulkCopy.ColumnMappings.Add("Age", "AGE");
  31.                         bulkCopy.ColumnMappings.Add("Adress", "ADRESS");
  32.                         bulkCopy.WriteToServer(dt);
  33.                         Console.WriteLine("插入成功!");
  34.                     }
  35.                     catch (Exception ex)
  36.                     {
  37.                         Console.WriteLine(ex.Message);
  38.                     }
  39.                     finally
  40.                     {
  41.                         if (destinationConnection.State == ConnectionState.Open)
  42.                         {
  43.                             destinationConnection.Close();
  44.                         }
  45.                         stopwatch.Stop();
  46.                         Console.WriteLine("插入:" + dt.Rows.Count + "数据,耗时" + (stopwatch.ElapsedMilliseconds / 1000).ToString() + "秒");
  47.                     }
  48.                 }
  49.             }
  50.         }
  51.     }
复制代码






上一篇:c#版MD5多线程解密插件版,你来当开发者!!!
下一篇:c#应用程序增加xml配置文件
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-12-1 16:41:38 | 显示全部楼层
不错。。。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-12-1 17:53:37 | 显示全部楼层
不错学习
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-12-3 13:25:38 | 显示全部楼层
学习学习
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2023-9-9 09:37:23 | 显示全部楼层
MSSQL 使用 nvarchar(max)、varbinary(max) 存储区别
https://www.itsvse.com/thread-10658-1-1.html
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2025-5-21 13:54:54 | 显示全部楼层
需要设置 ColumnMappings 映射字段,否则可能会抛出一些奇怪的异常
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2025-5-21 14:07:08 | 显示全部楼层
.NET/C# 通过 DataTable 动态创建表结构
https://www.itsvse.com/thread-11010-1-1.html
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2025-8-19 17:20:39 | 显示全部楼层
学习。。。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2026-11-4 13:54:36 | 显示全部楼层
增加批次和事务


在使用 BatchSize 时,有一个非常重要的隐藏机制需要注意:每一批(Batch)默认都是独立的事务。
如果你在导入第 12,000 条数据(第三批)时程序突然报错崩溃:
• 前面成功发送的两批(共 10,000 条)已经写入数据库,不会回滚。
• 报错的这一批及后面的数据不会被导入。
如果你希望要么全部成功,要么全部失败(发生错误时整体回滚),你需要配合 SqlTransaction 使用。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2026-11-4 13:55:42 | 显示全部楼层
ORM 框架 Dapper 简单使用
https://www.itsvse.com/thread-9509-1-1.html
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2026-11-14 05:29

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表