文档章节

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,结果...

© 著作权归作者所有

共有 人打赏支持
上一篇: 排序
下一篇: 升级SQL Server2016
黄裳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

没有更多内容

加载失败,请刷新页面

加载更多

Java 11 已发布,String 还能这样玩!

在文章《Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码》中,我有介绍到 Java 11 的八个新特性,其中关于 String 加强部分,我觉得有点意思,这里单独再拉出来讲。 Java 11 增加...

Java技术栈
14分钟前
0
0
什么是以太坊DAO?(二)

Decentralized Autonomous Organization,简称DAO,以太坊中重要的概念。一般翻译为去中心化的自治组织。 在上一节中,我们为了展示什么是DAO创建了一个合约,就像一个采用邀请制的俱乐部,会...

geek12345
30分钟前
4
0
全屋WiFi彻底无死角 这才是终极解决方案

无线网络现在不仅在家庭中不可或缺,在酒店、医院、学校等场景中的需求也越来越多。尤其是这些场景中,房间多但也需要每个房间都能够完美覆盖WiFi,传统的吸顶式AP就无法很好的解决问题。 H3...

linux-tao
44分钟前
4
0
Python日期字符串比较

需要用python的脚本来快速检测一个文件内的二个时间日期字符串的大小,其实实现很简单,首先一些基础的日期格式化知识如下 复制代码 %a星期的简写。如 星期三为Web %A星期的全写。如 星期三为...

dragon_tech
44分钟前
3
0
ORA 各种oraclesql错误

ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某...

青峰Jun19er
48分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部