文档章节

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

黄裳23
 黄裳23
发布于 2016/07/06 16:37
字数 382
阅读 31
收藏 1
点赞 0
评论 0
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
博文 48
码字总数 9420
作品 0
西安
高级程序员
C#使用表参数和存储过程批量导入数据

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

C_Sharp大大 ⋅ 2013/08/14 ⋅ 0

DataTable数据批量写入数据库三种方法比较 以及方法介绍

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

Yamazaki ⋅ 2012/05/21 ⋅ 0

ADO.net--SqlBulkCopy批量插入数据

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

开源中国首席老王 ⋅ 2014/11/27 ⋅ 0

SqlBulkCopy批量复制数据

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

Yamazaki ⋅ 2012/05/22 ⋅ 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

分析了Facebook上发布的1亿条视频,我们发现最受欢迎的视频类型是...

美国数据调研机构BuzzSumo分析了Facebook上的超过1亿条视频内容,得出了以下结论: 去年夏天,我们写了一篇文章关于为什么视频是Facebook营销的关键。今年夏天,我们的研究数据显示,包括Fac...

Data Analyst ⋅ 2017/09/04 ⋅ 0

ArrayList和LinkedList的区别

一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因...

小和尚敲代码 ⋅ 2016/02/27 ⋅ 0

NoSQL性能测试:MongoDB VS SequoiaDB

作为NoSQL的一个重要类型,文档型NoSQL通常被认为是最接近传统关系型数据库的NoSQL。文档型NoSQL的核心是数据嵌套,这种设计可以从某 种程度上大大简化传统数据库复杂的关联问题。同时由于摆...

SequoiaDB2013 ⋅ 2013/09/15 ⋅ 0

PostgreSQL中COUNT的各条件下(1亿条数据)例子

插入一亿条数据 (示例数据库:9.3.5) 参考资料:http://www.oschina.net/question/96003_70381 test=# insert into tbltime1 select generateseries(1,100000000),clock_timestamp(),now();......

dreamers ⋅ 2014/10/29 ⋅ 6

ADO.NET基础学习SqlBulkCopy

using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;......

GongBiao ⋅ 2013/12/03 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vuex学习

1、getters基本用法: 在store.js里面用const声明我们的getters属性。 const getters={ count:function (state) { return state.count +=100; }} export default new Vuex.S......

大美琴 ⋅ 37分钟前 ⋅ 0

292. Nim Game - LeetCode

Question 292. Nim Game Solution 思路:试着列举一下,就能发现一个n只要不是4的倍数,就能赢。 n 是否能赢1 true2 true3 true4 false 不论删除几,对方都能一把赢5 t...

yysue ⋅ 49分钟前 ⋅ 0

G6 关系数据可视化图形库 简单使用

官网 https://antv.alipay.com/zh-cn/g6/1.x/index.html 效果 首先生成给定数目的小球,并设置随机的颜色 按照顺序,设置小球的角度以及坐标 设置定时器,每隔一定的时间修改小球的角度和坐标...

阿豪boy ⋅ 51分钟前 ⋅ 0

6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩

zip压缩工具 zip命令可以压缩目录和文件,-r 压缩目录。 zip使用方法 zip 1.txt.zip 1.txt //压缩文件 zip -r 123.zip 123/ //压缩目录 unzip 1.txt.zip //解压 unzip 123.zip -d /root/456...

Linux_老吴 ⋅ 今天 ⋅ 0

react-loadable使用跳坑

官方给react-loadable的定义是: A higher order component for loading components with dynamic imports. 动态路由示例 withLoadable.js import React from 'react'import Loadable fro......

pengqinmm ⋅ 今天 ⋅ 0

记录工作中遇到的坑

1、ios safari浏览器向下滚动会触发window resize事件

端木遗风 ⋅ 今天 ⋅ 0

桥接设计模式

1、概述: 将抽象部分与他的实现部分分离,这样抽象化与实现化解耦,使他们可以独立的变化 如何实现解耦的呢,就是通过提供抽象化和实现化之间的桥接结构 桥接模式将继承模式转化成关联关系,他降...

职业搬砖20年 ⋅ 今天 ⋅ 0

20.zip压缩 tar打包 打包并压缩

6月25日任务 6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩 6.5 zip压缩工具: zip支持压缩目录 zip压缩完之后原来的文件不删除 不同的文件内容其实压缩的效果不一样 文件内有很多重复的用xz压...

王鑫linux ⋅ 今天 ⋅ 0

double类型数据保留四位小数的另一种思路

来源:透析公式处理,有时候数据有很长的小数位,有的时候由在四位以内,如果用一般的处理方法,那么不足四位的小树会补充0到第四位,这样子有点画蛇添足的感觉,不太好看。所以要根据小数的...

young_chen ⋅ 今天 ⋅ 0

Django配置163邮箱出现 authentication failed(535)错误解决方法

最近用Django写某网站,当配置163邮箱设置完成后,出现535错误即:smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed') Django初始配置邮箱设置 EMAIL_HOST = "smtp.1...

陈墨轩_CJX ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部