iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >C# MySQL 插入大批量数据
  • 440
分享到

C# MySQL 插入大批量数据

mysqlc#数据库 2023-09-08 15:09:37 440人浏览 八月长安
摘要

一、定义DataTable的数据类型 private DataTable GetDataTableFromExternalSource(string tablename) { DataTable dat

一、定义DataTable的数据类型

 private DataTable GetDataTableFromExternalSource(string tablename)        {            DataTable dataTable = new DataTable();            dataTable.TableName = tablename;            DataColumn IdColumn = dataTable.Columns.Add("Id", Type.GetType("System.Int64"));            IdColumn.AutoIncrement = true; //设置这一列自增            IdColumn.AllowDBNull = false;            IdColumn.AutoIncrementSeed = 1; //启始值            IdColumn.AutoIncrementStep = 1;  //每次增长数            dataTable.Columns.Add("ChannelName", Type.GetType("System.String"));            dataTable.Columns.Add("ChannelDescribe", Type.GetType("System.String"));            dataTable.Columns.Add("MessageTime", Type.GetType("System.DateTime"));            dataTable.Columns.Add("MessageMicrosecond", Type.GetType("System.Int32"));            dataTable.Columns.Add("MicrosecondCount", Type.GetType("System.Int32"));            dataTable.Columns.Add("ChannelValue", Type.GetType("System.String"));            dataTable.Columns.Add("CreateTime", Type.GetType("System.DateTime"));            return dataTable;        }

二、创建Mysql 数据库对应的数据库

 private bool CreateDetailDataTable(mysqlConnection conn, string computer_no, string dayStr, string dbName)        {            string tableName = computer_no + "_data_" + dayStr;            if (conn == null)            {            }            else            {                if (conn.State != ConnectionState.Open)                {                    conn.Open();                }            }            //SELECT* FROM infORMation_schema.TABLES where table_name = '6_data_20221205' and TABLE_SCHEMA = 'donghuadatadb';            string selectTable = string.Format("SELECT TABLE_NAME FROM information_schema.TABLES where table_name = '{0}' and TABLE_SCHEMA = '{1}'", tableName, dbName);            MysqlCommand command = new MySqlCommand(selectTable, conn);            object objResult = command.ExecuteScalar();            if (objResult == null)            {                command.CommandText = GetCreateTableSql(computer_no, dayStr, tableName);                command.ExecuteNonQuery();                command.Dispose();                return true;            }            else            {                return false;            }        }

mysql数据库表表结构

 private string GetCreateTableSql(string computer_no, string dayStr, string tableName)        {            StringBuilder createTableSql = new StringBuilder();            createTableSql.AppendFormat(" Create Table {0}", tableName);            createTableSql.AppendFormat("(");            createTableSql.AppendFormat("  `Id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',");            createTableSql.AppendFormat("  `ChannelName` varchar(255) NOT NULL COMMENT '通道名称',");            createTableSql.AppendFormat("  `ChannelDescribe` varchar(255) DEFAULT NULL COMMENT '测点描述',");            createTableSql.AppendFormat("  `MessageTime` datetime NOT NULL COMMENT '报文时间',");            createTableSql.AppendFormat("  `MessageMicrosecond` int(11) NOT NULL COMMENT '报文微妙',");            createTableSql.AppendFormat(" `MicrosecondCount` int(11) NOT NULL COMMENT '报文微妙计算',");            createTableSql.AppendFormat("  `ChannelValue` varchar(255) NOT NULL DEFAULT '' COMMENT '通道值',");            createTableSql.AppendFormat("  `CreateTime` datetime(6) NOT NULL COMMENT '创建时间',");            createTableSql.AppendFormat("  PRIMARY KEY(`Id`),");            createTableSql.AppendFormat("  UNIQUE KEY `tbrDataIndex` (`ChannelName`,`ChannelDescribe`,`MessageTime`,`MessageMicrosecond`,`CreateTime`)");            createTableSql.AppendFormat(") ENGINE = InnoDB DEFAULT CHARSET = utf8;");            return createTableSql.ToString();        }

三、调用大批量插入数据库的方法

 private void InsertAsync(MySqlConnection connection, DataTable dataTable)        {             open the connection            //using var connection = new MySqlConnection("server=localhost;database=donghuadatadb;uid=root;pwd=sa123;SslMode = none;AllowLoadLocalInfile=True");            //connection.Open();            // bulk copy the data            var bulkCopy = new MySqlBulkCopy(connection);            bulkCopy.DestinationTableName = dataTable.TableName;            bulkCopy.ColumnMappings.AddRange(GetMySqlColumnMapping(dataTable));            try            {                MySqlBulkCopyResult result = bulkCopy.WriteToServer(dataTable);                 check for problems                //if (result.Warnings.Count != 0)                //{                //                    //}            }            catch (Exception ex)            {            }            connection.Close();        }
 private List GetMySqlColumnMapping(DataTable dataTable)        {            List colMappings = new List();            int i = 0;            foreach (DataColumn col in dataTable.Columns)            {                colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName));                i++;            }            return colMappings;        }

四、调用大批量插入InsertAsync

 MySqlConnection conn = new MySqlConnection(_connstring);
            conn.Open();
            CreateDetailDataTable(conn, computer_No, dayStr, "donghuadatadb");
            MySqlCommand command = new MySqlCommand(GetSamplingFrequencyBycomputerNo(computer_No), conn);
            object obj = command.ExecuteScalar();
            string cypl = (obj != null ? obj.ToString() : "50");

            command.CommandText = GetMdataNo(computer_No, dayStr, startTime, endTime);
            MySqlDataReader reader = command.ExecuteReader();
            float avgtime = (float.Parse(1.ToString()) / float.Parse(cypl)) * 1000000;
            float millisecond = 0;//毫秒
            int second = 0;//秒
            string valuestr = string.Empty;//所有的通道值
            string ChannelNames = string.Empty;//通道名称
            string MessageTime_Millisecond = string.Empty;//报文时间微妙
            int PackageDataCount = 0;//多少组数据
            int MessageMicrosecond = 0;//微妙

            while (reader.Read())
            {

                valuestr = string.Empty;
                ChannelNames = string.Empty;
                MessageTime_Millisecond = string.Empty;
                PackageDataCount = 0;
                MessageMicrosecond = 0;

                valuestr = reader["ChannelValues"].ToString();
                ChannelNames = reader["ChannelNames"].ToString();
                DateTime messageTime = DateTime.Parse(reader["MessageTime"].ToString());//报文时间 ,精确到秒
                PackageDataCount = int.Parse(reader["PackageDataCount"].ToString());
                MessageMicrosecond = int.Parse(reader["MessageMicrosecond"].ToString());
                string[] valueArray = valuestr.Split("@");
                string[] tongdaonameArray = ChannelNames.Split("|");
                float MicrosecondCountTemp = 0;

                for (int i = 0; i < PackageDataCount; i++)
                {
                    if (i == 0)
                    {
                        MicrosecondCountTemp = MessageMicrosecond;
                    }
                    else
                    {
                        MicrosecondCountTemp = MicrosecondCountTemp + avgtime;
                    }

                    millisecond = 0;
                    second = 0;

                    millisecond = (MicrosecondCountTemp / float.Parse(1000.ToString()));
                    if (millisecond >= 1000)
                    {
                        second = (int)(millisecond / 1000);
                        MessageTime_Millisecond = messageTime.AddSeconds(second).ToString("yyyy-MM-dd HH:mm:ss") + "." + (Math.Round(millisecond) - (second * 1000));

                    }
                    else
                    {
                        MessageTime_Millisecond = messageTime.ToString("yyyy-MM-dd HH:mm:ss") + "." + Math.Round(millisecond);
                    }
                    int n = 0;
                    for (int j = (i == 0 ? 0 : i * tongdaonameArray.Length); j < (i == 0 ? tongdaonameArray.Length : (((i * tongdaonameArray.Length) + tongdaonameArray.Length))); j++)
                    {
                        DataRow newRow = dataTable.NewRow();
                        newRow["ChannelName"] = tongdaonameArray[n];
                        newRow["ChannelDescribe"] = "ChannelDescribe";
                        newRow["MessageTime"] = messageTime;
                        newRow["MessageMicrosecond"] = MessageMicrosecond;
                        newRow["MicrosecondCount"] = MicrosecondCountTemp;
                        newRow["ChannelValue"] = valueArray[j];
                        newRow["CreateTime"] = DateTime.Now;
                        dataTable.Rows.Add(newRow);
                        n++;
                    }
                }

            }
            reader.Close();

来源地址:https://blog.csdn.net/xqyunyun/article/details/130820408

您可能感兴趣的文档:

--结束END--

本文标题: C# MySQL 插入大批量数据

本文链接: https://www.lsjlt.com/news/400240.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C# MySQL 插入大批量数据
    一、定义DataTable的数据类型 private DataTable GetDataTableFromExternalSource(string tablename) { DataTable dat...
    99+
    2023-09-08
    mysql c# 数据库
  • Mysql大数据批量插入方法
    MySQL是当前最流行的关系型数据库之一,大数据批量插入是MySQL中常用的操作之一。在处理大量数据时,如果一条一条地插入会极大地影响效率,因此批量插入是一个更好的选择,可以大大提高数据的处理速度。下面介绍几种MySQL大数据批量插入的方法...
    99+
    2023-09-14
    mysql 大数据 数据库
  • 大批量数据分批批量插入或更新(Mybatis+MySQL)
    大批量数据分批批量插入或更新 在MySQL数据库的前提下,插入或更新大批量数据。首先批量插入需要考虑到以下几个因素: 数据库一次可以承受多大或者多少条数据的插入批量插入是否会占用Mysql资源太久,影响系统整体使用性能代码中的集合是否会造成...
    99+
    2023-08-30
    mybatis mysql 数据库 java spring boot
  • MyBatis如何批量插入大量数据
    这篇文章将为大家详细讲解有关MyBatis如何批量插入大量数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题背景:只用MyBatis中foreach进行批量插入数据,一次性插入超过一千条的时候MyBa...
    99+
    2023-06-22
  • python批量插入数据到mysql
    使用python批量插入数据到mysql的三种方法 自动化单条insert # -*- coding:utf-8 -*-import timefrom pymysql import *# 装饰器,计算插入50000条数据需要的时间def t...
    99+
    2023-09-06
    mysql 数据库 sql
  • MyBatis批量插入大量数据(1w以上)
    问题背景:只用MyBatis中foreach进行批量插入数据,一次性插入超过一千条的时候MyBatis开始报错。项目使用技术:SpringBoot、MyBatis 批量插入碰到的问题...
    99+
    2022-11-12
  • MySQL中怎么批量插入数据
    本篇文章为大家展示了MySQL中怎么批量插入数据,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.创建测试表mysql> show create table ...
    99+
    2022-10-18
  • mysql大批量插入数据的4种方法示例
    前言 本文主要给大家介绍了关于mysql大批量插入数据的4种方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 方法一:循环插入 这个也是最普通的方式,如果数据量不是很大,可以使用,但是...
    99+
    2022-10-18
  • Mybatis批量插入大量数据最优方式
    Mybatis批量插入的方式有三种 1. 普通插入 2. foreach 优化插入 3. ExecutorType.BATCH插入 下面对这三种分别进行比较: 1.普通插入 默认的插入方式是遍历ins...
    99+
    2023-09-06
    mybatis java mysql
  • 【mysql】向mysql数据库批量插入数据(循环)
    错误插入  delimiter $$ //以delimiter来标记用$表示存储过程结束 create procedure pre() //创建pre()存储方法 begin declare i int; //定义i变量 s...
    99+
    2021-08-13
    【mysql】向mysql数据库批量插入数据(循环)
  • Elasticsearch批量插入数据
    Elasticsearch批量插入数据 使用bulk批量操作数据库 1. 创建批量操作文件 格式: {"index":{"_index":"home","_type":"home",""_id":"2"}}...
    99+
    2022-10-18
  • SQL批量插入数据
    MS SQL Server数据库批量插入数据的sql语句总结:第一种:insert into tb_NameList(Name,InsertDate,UpdateDate)values('aa',GETDA...
    99+
    2022-10-18
  • java 批量插入数据
    批量插入数据,常见的使用mybatis foreach 插入的方式,原始的方式和批处理 1,常见的mybatis foreach xml insert into CODEINFO (CODE_TYPE, CODE, MEAN, STAT...
    99+
    2023-09-03
    mybatis mysql 批量插入
  • MySql批量插入时如何不重复插入数据
    目录前言一、insert ignore into二、on duplicate key update三、replace into总结前言 Mysql插入不重复的数据,当大数据量的数据需...
    99+
    2022-11-12
  • MySQL大批量插入数据时怎么优化SQL语句
    这篇文章主要讲解了“MySQL大批量插入数据时怎么优化SQL语句”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL大批量插入数据时怎么优化SQL语句”...
    99+
    2022-10-18
  • python向mySQL批量插入数据的方
    通过调用mySQLdb python库中的 cursor.executemany()函数完成批量处理。 今天用这个函数完成了批量插入 例程: def test_insertDB():     conn = database.Connect...
    99+
    2023-01-31
    批量 数据 python
  • mysql快速插入大量数据
    前言 最近做性能测试,需要模拟生产环境的数据量,在造百万、千万级数据的时候发现直接使用插入sql效率极低,百度了一翻,找到几种方式,但用下来还是有很快速的方式,推荐第四种 插入mysql数据效率对比 ...
    99+
    2023-09-23
    mysql 数据库
  • python MySQL 批量插入
    # coding:utf-8 import pymysql # 打开数据库连接 db = pymysql.connect(host='localhost', port=3306, user='u...
    99+
    2023-01-31
    批量 python MySQL
  • .NET多种数据库大数据批量插入分析
    本篇内容介绍了“.NET多种数据库大数据批量插入分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!功能介绍 (需要版本5.0.45)大数据操...
    99+
    2023-06-25
  • ORACLE大批量插入数据的详细步骤
    目录尝试了一下几种方式:一.关闭日志,数据追加模式二:PARALLEL模式(并行进程数要谨慎 )总结最近有几张表随着时间不断的增长,表中的数据量也越来越大,想把原来的表改成分区表,需要两个步骤: 一:建立分区表...
    99+
    2023-04-06
    oracle批量添加数据 oracle批量插入数据 oracle批量新增
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作