C#批量向数据库插入数据

程序中,批量插入数据有两种思路。

1、用for循环,一条一条的插入,经实测,这种方式太慢了(插入一万条数据至少都需要6-7秒),因为每次插入都要打开数据库连接,执行sql,关闭连接,显然这种方式不可行。

2、使用SqlBulkCopy,在程序中定义一个DataTable,把需要插入的数据存储在DataTable中,注意DataTable中的列需与数据库中保持一致,即使是自增字段也要在DataTable中有对应的列。

具体代码如下:

            DataTable dt = new DataTable();
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Password", Type.GetType("System.String"));
            dt.Columns.Add("AddTime", typeof(DateTime));

            Stopwatch sw = new Stopwatch();
            sw.Start();

            for (int i = 0; i < 10000; i++)
            {
                //SqlHelper.ExecuteNonQuery(SqlHelper.Connstr, CommandType.Text, "insert into T_User(Name, Password, AddTime) values (‘qq" + i + "‘, ‘ww" + i + "‘, getdate())");
                dt.Rows.Add(null, "qq" + i, "ww" + i, DateTime.Now);
            }
            using (SqlConnection conn = new SqlConnection(SqlHelper.Connstr))
            {
                SqlBulkCopy bulkCopy = new SqlBulkCopy(conn);
                bulkCopy.DestinationTableName = "T_User";
                bulkCopy.BatchSize = dt.Rows.Count;
                conn.Open();
                if (dt != null && dt.Rows.Count != 0)
                {
                    bulkCopy.WriteToServer(dt);
                }
            }

            sw.Stop();
            TimeSpan ts = sw.Elapsed;
            Console.WriteLine(ts.TotalMilliseconds);

            Console.ReadKey();

  经测试,这样子插入10000条数据只需要几百毫秒

原文地址:https://www.cnblogs.com/fanqf/p/9026316.html

时间: 2024-07-29 15:42:18

C#批量向数据库插入数据的相关文章

在C#应用程序中,利用表值参数过滤重复,批量向数据库导入数据,并且返回重复数据

在很多情况下,应用程序都需要实现excel数据导入功能,数据如果只有几十条,或上百条,甚至上千条,速度还好. 但是不仅如此,如果客户提供给你的excel本身存在着重复数据,或是excel中的某些数据已经在数据库存在,那这时,在向数据库插入数据前你还得判重,如果不存在才进行导入 通常,我们第一步就会通过上传的方式把excel中的数据读到内存,然后通过循环的方式得出一条一条数据,接着对于每条数据用关键字段去往数据库中进行一次查重,若存在则不做事情,若 不存在则向数据库中插入一条数据.这样一来,我们每

Excel向数据库插入数据和数据库向Excel导出数据

为了熟悉java里工作簿的相关知识点,所以找了"Excel向数据库插入数据和数据库向Excel导出数据"的功能来实现. 注意事项:1,mysql数据库: 2,需要导入的jar包有 jxl.jar,mysql-connector-java-5.1.22-bin.jar,ojdbc6.jar 代码如下: 一, 建立数据库名称 javaforexcel,建立表stu DROP TABLE IF EXISTS `stu`;CREATE TABLE `stu` (  `id` int(11) N

数据库插入数据返回当前主键ID值方法

环境:SQL Anywhere 9.0.2 创建语句: create table test(    id int primary key identity(1,1),    name varchar(20)) 当我们插入一条数据的时候,我们很多时候都想立刻获取当前插入的主键值返回以做它用.我们通常的做法有如下几种: 1. 先 select max(id) +1 ,然后将+1后的值作为主键插入数据库: 2. 使用特定数据库的 auto_increment 特性,在插入数据完成后,使用 select

批量往数据库导入数据遇到的问题总结

项目开发中,有个功能需要往数据库批量插入数据,刚开始没考虑那么多,就一条一条数据循环插入数据库,数据量少的时候,效率还可以,但是当数据量达到上千甚至几百时,这个方法效率就不行了,得等段时间才全部插入成功,用户体验度非常不好,果断pass掉该方法. 接着换令一种方法,那就是拼接insert字符串,即"Insert into TableName Values(' ',' ',' '),(' ',' ',' ');",刚开始还比较happy,插入速度很快,效率很高,可是当数据过千后,问题出现

向SqlServer数据库插入数据

Insert Values Insert Select Insert Exec Select Into Bulk Insert Insert Values是最常用的一种插入数据的方式,基本语法如下,表名之后可以指定目标列的名称,这种显式的指定目标列的名称是可选的,但是这种做法的好处是对语句的列值列名之间的关联关系进行控制,而不必单纯的依赖定义表时 各个列出现的顺序 INSERT INTO dbo.DimDate ( DataKey , Year , Qu , QuCN , Month , Mon

关于mysql数据库插入数据,不能插入中文和出现中文乱码问题

首先,推荐一篇博客:http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html 当时,我安装完mysql数据库后,新建一个数据库后插入数据,首先出现了中文不能插入mysql数据库的问题,解决办法如下: 修改mysql文件中my.ini里的 sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"变成sql-mode="NO_A

php向数据库插入数据

<?php header("Content-type: text/html;charset=utf-8"); $con = mysql_connect("localhost","root","root");//连接数据库 if (!$con){ die('Could not connect: ' . mysql_error()); } mysql_select_db("web", $con);//打开

Python数据库(二)-Mysql数据库插入数据

通过python连接mysql数据库,并插入数据 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" import pymysql conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='root',db='niushop_b2c') cursor = conn.cursor() data = [ ('John','abcdef'), ('Jack','

sqlserver数据库插入数据

//插入一行数据INSERT [INTO] 表名 [(列名)] VALUES (值列表)注意事项:(1)每次插入一行数据,不能只插入半行或者几列数据 插入的数据是否有效将按照整行的完整性的要求来检验 (2)每个数据值的数据类型.精度和小数位数必须与相应的列匹配(3)不能为标识列指定值 (4)如果在设计表的时候就指定了某列不允许为空,则必须插入数据 (5)插入的数据项,要求符合检查约束的要求 (6)具有缺省值的列,可以使用DEFAULT(缺省)关键字来代替插入的数值源代码:INSERT INTO