文档章节

SqlBulkCopy插入1亿条数据需要20分钟?

黄裳23
 黄裳23
发布于 2016/07/06 16:37
字数 382
阅读 32
收藏 1
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;

namespace SQLTest
{
    public class ClassData
    {
        public int GradeID = 0;
        public int ClassID = 0;
        public int StudentID = 0;
        public DateTime Datetime = DateTime.UtcNow;
        public double Data = 0;
        public int GradeIDField
        {
            get { return GradeID; }
            set { GradeID = value; }
        }
        public int ClassIDField
        {
            get { return ClassID; }
            set { ClassID = value; }
        }
        public int StudentIDField
        {
            get { return StudentID; }
            set { StudentID = value; }
        }
        public DateTime DatetimeField
        {
            get { return Datetime; }
            set { Datetime = value; }
        }
        public double DataField
        {
            get { return Data; }
            set { Data = value; }
        }

        public ClassData(int gradeID, int classID, int studentID, DateTime datetime, double data)
        {
            this.GradeID = gradeID;
            this.ClassID = classID;
            this.StudentID = studentID;
            this.Datetime = datetime;
            this.Data = data;
        }
    }
    class Program
    {
        public static void SqlBulkCopyByDatatable(string connectionString, string TableName, DataTable dataTable)
        {

            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction))
                {
                    try
                    {
                        sqlbulkcopy.DestinationTableName = TableName;
                        for (int i = 0; i < dataTable.Columns.Count; i++)
                        {
                            sqlbulkcopy.ColumnMappings.Add(dataTable.Columns[i].ColumnName, dataTable.Columns[i].ColumnName);
                        }
                        sqlbulkcopy.WriteToServer(dataTable);
                    }
                    catch (System.Exception ex)
                    {
                        throw ex;
                    }
                }
            }
        }

        private static string connectionString = @"Data Source=(local)\myschool;Database=mj_mydatabase;Integrated Security=true";

        static void Main(string[] args)
        {
            DateTime startDateTime = new DateTime(2016, 1, 1, 0, 0, 37);
            DateTime endDateTime = new DateTime(2016, 2, 10, 0, 10, 0);

            SqlConnection myConnection = new SqlConnection(connectionString);
            myConnection.Open();

            while (startDateTime <= endDateTime)
            {
                List<ClassData> dataList = new List<ClassData>();
                int start = 250;
                int step = 1;
                while (step <= 250)
                {
                    int temp = start + step;
                    for (int j = 36; j <= 39; j++)
                    {
                        DateTime realTime = startDateTime;
                        for (int k = 0; k < 5; k++)
                        {
                            dataList.Add(new ClassData(1, temp, j, realTime, 0.333333));
                            realTime = realTime.AddMinutes(1);
                        }
                    }
                    temp = start - step;
                    for (int j = 36; j <= 39; j++)
                    {
                        DateTime realTime = startDateTime;
                        for (int k = 0; k < 5; k++)
                        {
                            dataList.Add(new ClassData(1, temp, j, realTime, 0.333333));
                            realTime = realTime.AddMinutes(1);
                        }
                    }
                    step++;
                }
                startDateTime = startDateTime.AddMinutes(5);
                try
                {
                    DataTable dataTable = new DataTable("MJ_ClassData");
                    dataTable.Columns.Add("GradeID ", Type.GetType("System.Int32"));
                    dataTable.Columns.Add("ClassID", Type.GetType("System.Int32"));
                    dataTable.Columns.Add("StudentID", Type.GetType("System.Int32"));
                    dataTable.Columns.Add("Datetime", Type.GetType("System.DateTime"));
                    dataTable.Columns.Add("Data", Type.GetType("System.Single"));
                    foreach (ClassData data in dataList)
                    {
                        dataTable.Rows.Add(new Object[] { data.GradeID, data.ClassID, data.StudentID, data.Datetime, data.Data });
                    }
                    SqlBulkCopyByDatatable(connectionString, "MJ_ClassData", dataTable);
                }
                finally
                {
                    myConnection.Close();
                }
            }

        }
    }
}


比较搞笑的是,一开始是这样做的,让list的数据全部做完,调用一次sqlbulkcopy,结果...

© 著作权归作者所有

共有 人打赏支持
黄裳23
粉丝 2
博文 53
码字总数 9420
作品 0
西安
高级程序员
C#使用表参数和存储过程批量导入数据

如果要大量导入数据到数据库,如果每条数据都要和数据库建立-断开连接,那么将会非常费时。 个性化的方法:就是使用表参数和存储过程,特点是非常自由灵活,可以在存储过程中实现所需要的SQL...

C_Sharp大大
2013/08/14
0
0
DataTable数据批量写入数据库三种方法比较 以及方法介绍

DataTable数据批量写入数据库三种方法比较 以及方法介绍 收藏 最近在将excel中的文件导入到数据库中,用程序进行编写,由于数据量较大所以速度很慢,后来采用了SqlBulkCopy类,解决了速度的问...

Yamazaki
2012/05/21
0
0
ADO.net--SqlBulkCopy批量插入数据

一般情况下,我们在向数据库中插入数据时用Insert语句,但是当数据量很大的时候,这种情况就比较缓慢了,这个时候就需要SqlBulkCopy这个类。 SqlBulkCopy本身常用的函数有这么几个 Destinat...

开源中国首席老王
2014/11/27
0
0
SqlBulkCopy批量复制数据

在.Net1.1中无论是对于批量插入整个DataTable中的所有数据到数据库中,还是进行不同数据源之间的迁移,都不是很方便。而 在.Net2.0中,SQLClient命名空间下增加了几个新类帮助我们通过DataT...

Yamazaki
2012/05/22
0
0
PostgreSQL COUNT的各条件下(1亿条数据)例子

插入一亿条数据 (示例数据库:9.3.5) test=# insert into tbltime1 select generateseries(1,100000000),clock_timestamp(),now(); INSERT 0 100000000 Time: 525833.218 ms 约:8.7分钟 COUN......

liaolzy2
2014/12/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

InvalidKeyException: Illegal key size

Caused by: java.lang.RuntimeException: java.security.InvalidKeyException: Illegal key size 解决方案:去官方下载JCE无限制权限策略文件。 jdk 5: http://www.oracle.com/technetwork/j......

自由的开源
20分钟前
0
0
JAVA秒杀实现以及优化原理

秒杀与其他业务最大的区别在于:秒杀的瞬间, (1)系统的并发量会非常的大 (2)并发量大的同时,网络的流量也会瞬间变大。 关于(2),最常用的办法就是做页面静态化,也就是常说的前后端分...

小贱是个程序员
24分钟前
1
0
Spring Aop之Advisor解析

在上文Spring Aop之Target Source详解中,我们讲解了Spring是如何通过封装Target Source来达到对最终获取的目标bean进行封装的目的。其中我们讲解到,Spring Aop对目标bean进行代理是通过Ann...

爱宝贝丶
26分钟前
0
0
Java高级工程师面试阿里,阿里云,天猫,菜鸟,涉及到的知识点

前言: 分享 Java高级工程师面试阿里,阿里云,天猫,菜鸟,涉及到的知识点,文章有点长,但比较全面,阅读时间15分钟左右,干货满满。 一、HashMap的那些事 1.1、HashMap的实现原理 1.1.1、...

Java大蜗牛
51分钟前
2
0
nginx模块学习五 expires 浏览器缓存

缓存原理 语法 Syntax: expires [modified] time;expires epoch | max | off;Default: expires off;Context: http,server,location,if in location 例/etc/nginx/conf.d/default.con......

Romanceling
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部