c#通过datatable插入大量数据,50万数据只需要3秒

author author     2022-08-14     227

关键词:

技术分享

 

数据库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 将数据插入 SQL Server 中的特定列

】从C#Datatable将数据插入SQLServer中的特定列【英文标题】:InsertdataintospecificcolumnsinSQLServerfromC#Datatable【发布时间】:2017-03-1407:01:57【问题描述】:假设我的SQLServer表看起来像Col1|Col2|Col3|Col4|Col5我的数据表看起来像ColX|ColY|ColZ如何... 查看详情

c#如何向Cassandra表中插入大量数据

】c#如何向Cassandra表中插入大量数据【英文标题】:c#HowtoinserthugeamountofdataintoCassandratable【发布时间】:2020-03-0501:53:57【问题描述】:亲爱的,我正在尝试使用C#应用程序将大约100000行插入Cassandra数据库。为了实现这一点,我正在... 查看详情

将数据表批量插入 MS Access (MS Excel) 数据库 (C#)

】将数据表批量插入MSAccess(MSExcel)数据库(C#)【英文标题】:BulkinsertDatatabletoMSAccess(MSExcel)database(C#)【发布时间】:2013-07-2023:04:52【问题描述】:我需要向MicrosoftAccess数据库(accdb文件)插入大量数据(每个表大约500MB)。我的软下... 查看详情

在 SQL Server(C# 客户端)中批量插入大量数据的最快方法是啥

】在SQLServer(C#客户端)中批量插入大量数据的最快方法是啥【英文标题】:What\'sthefastestwaytobulkinsertalotofdatainSQLServer(C#client)在SQLServer(C#客户端)中批量插入大量数据的最快方法是什么【发布时间】:2010-09-0615:43:48【问题描述... 查看详情

在c#中进行datatable操作:根据列数据插入一些汇总行

参考技术A可以根据DataTable中的数据行循环,新增一个汇总行,然后计算添加。追问请说得详细点,怎样计算才能达到上面的效果?? 参考技术B你那个Group的三级是否为一个树形结构?可以留联系详细看看!追问Group不是一个事... 查看详情

大量数据快速插入方法探究[nologging+parallel+append]

大量数据快速插入方法探究快速插入千万级别的数据,无非就是nologging+parallel+append。1     环境搭建构建一个千万级别的源表,向一个空表insert操作。参考指标:insert动作完成的实际时间。SQL> drop table... 查看详情

在 C# 中序列化 DataTable 会占用大量内存 - 如何改进这一点

】在C#中序列化DataTable会占用大量内存-如何改进这一点【英文标题】:SerializingDataTableinC#usesalotofmemory-howtoimprovethis【发布时间】:2016-03-2322:49:27【问题描述】:常规我有一些类似于数据库请求的代理。将结果发送回客户端时,发... 查看详情

c#实现几种数据库的大数据批量插入

参考技术A一、SqlServer数据批量插入SqlServer的批量插入很简单,使用SqlBulkCopy就可以,以下是该类的实现:复制代码///<summary>///为System.Data.SqlClient提供的用于批量操作的方法。///</summary>publicsealedclassMsSqlBatcher:IBatcherProvider/... 查看详情

c#怎么将datatable数据保存到excel中

...ok=newWorkbook(); //指定版本信息,07及以上版本最多可以插入1048576行数据workbook.Version=ExcelVersion.Version2013; //获取第一张sheetWorksheetsheet=workbook.Worksheets[0]; //得到在datatable里的数据DataTabledt=GetDataTable(); //从第一行第一列... 查看详情

c#怎么通过表头字段获得整个datatable的一列的数据

参考技术Aforeach(datarowsitemindatatable)dataset_stu.tables["学生表"].rows[0].["学生"];//这样循环读取一行的每一个列的值上面循环去读取可以把一列的每个值读取出来,我就是这样实现的。 查看详情

c#将linq数据集转换为datatable

C#将LINQ数据集转换为Datatable1.方法一:(测试可用)//通过一个公共类将LINQ数据集转换为datatablepublic DataTable LINQToDataTable<T>(IEnumerable<T>varlist){    DataTable dtReturn= ne 查看详情

c#在datatable中怎么筛选数据?

...!用dt.DefaultView.RowFilter="";写!参考技术ADataTable可以通过select来筛选数据datatable.select("");你的需求貌似需要分组可以用linq 参考技术B要明确需求是什么,你上面的描述也许不是筛选,说是分组更确切些。本回答被提问... 查看详情

批量插入数据,将datatable里的数据批量写入数据库的方法

大量数据导入操作,也就是直接将DataTable里的内容写入到数据库通用方法:拼接Insert语句,好土鳖 1.MSSqlServer:  使用SqlBulkCopy2.MySql:adapter.update()批量更新MySqlBulkLoader,这个是从文件里边到的,有个实现是先将DATATable编程CSV文件... 查看详情

将自定义数据属性插入 JQuery DataTables

】将自定义数据属性插入JQueryDataTables【英文标题】:InsertingcustomdataattributesintoJQueryDataTables【发布时间】:2014-11-0721:41:50【问题描述】:问题:我正在将JQueryDataTablesv1.10用于与工作相关的项目。该项目需要使用作为表值传入的解... 查看详情

DataTable 从 C# 中的现有数据库结构自动填充

...-01-1916:39:44【问题描述】:我有一个WinForm要求在文本框中插入电子邮件,单击搜索按钮后,sql查询将搜索表中的记录并在DataGridView中显示结果。这里是搜索按钮的代码privatevoidRegUnregSearchBu 查看详情

C# Datagridview 行未通过插入数据库更新

】C#Datagridview行未通过插入数据库更新【英文标题】:C#Datagridviewrowsnotupdatedbyinserttodatabase【发布时间】:2014-07-2217:53:44【问题描述】:我在C#中有一个本地数据库,我通过这个命令返回它的内容:publicDataTablegetVillages()trystringstrCom... 查看详情

c#中如何将datatable保存到数据库?

C#中,比如有个DataTbaleA,几万行数据,怎么样快速的把DataTbaleA保存到数据库中,并且数据库创建好一个DataTbaleA名字的表,用INSERT需要一条一条保存,效率太慢。额。但是如果我是Access数据库,用不了SqlBulkCopy,怎么办呢?参考... 查看详情

如何将大量数据插入数据库[重复]

】如何将大量数据插入数据库[重复]【英文标题】:Howtoinsertalotofdataintodatabase[duplicate]【发布时间】:2016-12-1122:12:47【问题描述】:我在C#中有一个程序,它从4个来源(2个excel表、oracle和access数据库)下载数据并相互计算它们。... 查看详情