private void button1_Click(object sender, EventArgs e){//Sqlite使用事务批量操作 极大的提高速度DateTime starttime = DateTime.Now;using (SQLiteConnection con = new SQLiteConnection(connStr)){con.Open();DbTransaction trans = con.BeginTransaction();//开始事务     SQLiteCommand cmd = new SQLiteCommand(con);try{cmd.CommandText = "INSERT INTO MyTable(username,useraddr,userage) VALUES(@a,@b,@c)";for (int n = 0; n < 100000; n++){cmd.Parameters.Add(new SQLiteParameter("@a", DbType.String)); //MySql 使用MySqlDbType.Stringcmd.Parameters.Add(new SQLiteParameter("@b", DbType.String)); //MySql 引用MySql.Data.dllcmd.Parameters.Add(new SQLiteParameter("@c", DbType.String));cmd.Parameters["@a"].Value = "张三" + n;cmd.Parameters["@b"].Value = "深圳" + n;cmd.Parameters["@c"].Value = 10 + n;cmd.ExecuteNonQuery();}trans.Commit();//提交事务  DateTime endtime = DateTime.Now;MessageBox.Show("插入成功,用时" + (endtime - starttime).TotalMilliseconds);}catch(Exception ex){MessageBox.Show(ex.Message);}}}//MySql 事务批量提交 极大提交速度
try
{using (MySqlConnection con = new MySqlConnection(MySqlStr)){con.Open();DbTransaction trans = con.BeginTransaction();//开始事务  #region 防重复先删除//循环本地Sqlite数据库数据for (int i = 0; i < count; i++){DataRow dr = ds.Tables[0].Rows[i];string sqlDelete = "delete from packect where proimei=@d";MySqlCommand cmd1 = new MySqlCommand(sqlDelete, con);                           cmd1.Parameters.Add(new MySqlParameter("@d", MySqlDbType.String));cmd1.Parameters["@d"].Value = dr["proimei"];cmd1.ExecuteNonQuery();}#endregion#region 新增数据//循环本地Sqlite数据库数据for (int i = 0; i < count; i++){DataRow dr = ds.Tables[0].Rows[i];string sqlInsert = "insert into packect(proimei, prokg, proadddate) values(@a,@b,@c)";MySqlCommand cmd2 = new MySqlCommand(sqlInsert, con);  cmd2.Parameters.Add(new MySqlParameter("@a", MySqlDbType.String));cmd2.Parameters.Add(new MySqlParameter("@b", MySqlDbType.Decimal));cmd2.Parameters.Add(new MySqlParameter("@c", MySqlDbType.DateTime));cmd2.Parameters["@a"].Value = dr["proimei"];cmd2.Parameters["@b"].Value = dr["prokg"];cmd2.Parameters["@c"].Value = dr["proadddate"];cmd2.ExecuteNonQuery();}#endregiontrans.Commit();//提交事务    DateTime endtime = DateTime.Now;MessageBox.Show("上传数据成功,用时" + (endtime - starttime).TotalMilliseconds + "毫秒!");//清空本地数据库SQLiteHelper.ExecuteNonQuery(connStr, "delete from table1", CommandType.Text);}
}
catch (Exception ex)
{MessageBox.Show(ex.Message);
}/*DataTable dt = new DataTable();//定义需要插入的字段,字段名需跟数据库字段保持一致dt.Columns.Add("username");dt.Columns.Add("useraddr");dt.Columns.Add("userage");for (int i = 0; i < 10000; i++){dt.Rows.Add("张三" + i, "深圳" + i, i);}DateTime starttime = DateTime.Now;SqlBulkCopyInsert(dt, "mytable");DateTime endtime = DateTime.Now;Response.Write("插入成功,用时" + (endtime - starttime).TotalSeconds + "秒");     *//// <summary>    /// 使用SqlBulkCopy批量插入,只限SQLServer,超大数据量快速导入     /// </summary>    /// <param name="table">填充的DataTable,支持其它数据源,请看重载</param>    /// <param name="tableName">数据库对应表名</param>      public void SqlBulkCopyInsert(DataTable table, string tableName){SqlBulkCopy sbc = new SqlBulkCopy(MSCL.Until.GetApp("SqlConnStr"));sbc.DestinationTableName = tableName;for (int i = 0; i < table.Columns.Count; i++){sbc.ColumnMappings.Add(table.Columns[i].ColumnName, table.Columns[i].ColumnName);}sbc.WriteToServer(table);} /// <summary>  /// 使用SqlBulkCopy批量插入,只限SQLServer,超大数据量快速导入  /// 缺点,没有返回行数  /// </summary>  /// <param name="table">填充的DataTable,支持其它数据源,请看重载</param>  /// <param name="tableName">数据库对应表名</param>  /// <param name="columns">插入表对应的列名集合</param>  public void SqlBulkCopyInsert(DataTable table, string tableName, string[] columns){SqlBulkCopy sbc = new SqlBulkCopy("接连字符串");sbc.DestinationTableName = tableName;foreach (string col in columns){sbc.ColumnMappings.Add(col, col);}sbc.WriteToServer(table);}/// <summary>  /// 多行插入,Connection/Command/DataAdapter看你连接的数据库类型  /// 进行相应的替换即可  /// </summary>  /// <param name="ds">填充数据后的数据集</param>  /// <returns>受影响行数</returns>  public int MultyInsert(DataSet ds){int result = 0;IDbConnection con = new OracleConnection("连接字符串");con.Open();IDbCommand cmd = new OracleCommand();cmd.CommandText = "Insert into Member(UserName,Password) values(@name,@password)";IDbDataParameter namePar = cmd.CreateParameter();namePar.ParameterName = "@name";namePar.SourceColumn = "UserName";namePar.SourceVersion = DataRowVersion.Original;namePar.DbType = DbType.String;cmd.Parameters.Add(namePar);IDbDataParameter passPar = cmd.CreateParameter();passPar.ParameterName = "@pass";passPar.DbType = DbType.String;passPar.SourceColumn = "Password";passPar.SourceVersion = DataRowVersion.Original;cmd.Parameters.Add(passPar);IDbDataAdapter adpt = new OracleDataAdapter();adpt.InsertCommand = cmd;try{result = adpt.Update(ds);}catch (Exception){throw;}finally{con.Close();}return result;}  /** Oracle中非常强大快速的数据批量操作方法
*/
引用
//using System.Data;
//using System.Data.OracleClient;
//using Oracle.DataAccess.Client; //Oracle自带数据访问组件 位置: $Oracle安装路径$/bin/Oracle.DataAccess.dll
//设置一个数据库的连接串
string connectStr = "User Id=scott;Password=tiger;Data Source=";
OracleConnection conn = new OracleConnection(connectStr);
OracleCommand command = new OracleCommand();
command.Connection = conn;
//到此为止,还都是我们熟悉的代码,下面就要开始喽
//这个参数需要指定每次批插入的记录数
int recc = 10000000;
command.ArrayBindCount = recc;
//在这个命令行中,用到了参数,参数我们很熟悉,但是这个参数在传值的时候
//用到的是数组,而不是单个的值,这就是它独特的地方
command.CommandText = "insert into dept values(:deptno, :deptname, :loc)";
conn.Open();
//下面定义几个数组,分别表示三个字段,数组的长度由参数直接给出
int[] deptNo = new int[recc];
string[] dname = new string[recc];
string[] loc = new string[recc];
// 为了传递参数,不可避免的要使用参数,下面会连续定义三个
// 从名称可以直接看出每个参数的含义,不在每个解释了
OracleParameter deptNoParam = new OracleParameter("deptno", OracleType.Int32);
deptNoParam.Direction =  ParameterDirection.Input;
deptNoParam.Value = deptNo;
command.Parameters.Add(deptNoParam);
OracleParameter deptNameParam = new OracleParameter("deptname", OracleType.VarChar);
deptNameParam.Direction = ParameterDirection.Input;
deptNameParam.Value = dname; command.Parameters.Add(deptNameParam);
OracleParameter deptLocParam = new OracleParameter("loc", OracleType.VarChar);
deptLocParam.Direction = ParameterDirection.Input;
deptLocParam.Value = loc;
command.Parameters.Add(deptLocParam);
//在下面的循环中,先把数组定义好,而不是像上面那样直接生成SQL
for (int i = 0; i < recc; i++)
{deptNo[i] = i;dname[i] = i.ToString();loc[i] = i.ToString();
}
//这个调用将把参数数组传进SQL,同时写入数据库
command.ExecuteNonQuery();

转载于:https://www.cnblogs.com/chenmfly/p/4531993.html

启用事务操作,解决批量插入或更新sqlite,mssql等数据库耗时问题相关推荐

  1. pg批量插入_PostgreSQL实现批量插入、更新与合并操作的方法

    前言 就在 2019 年 1 月份微软收购了 PostgreSQL 数据库的初创公司 CitusData, 在云数据库方面可以增强与 AWS 的竟争.AWS 的 RDS 两大开源数据库就是 MySQL ...

  2. PostgreSQL实现批量插入、更新与合并操作的方法_PostgreSQL_脚本之家

    前言 就在 2019 年 1 月份微软收购了 PostgreSQL 数据库的初创公司 CitusData, 在云数据库方面可以增强与 AWS 的竟争.AWS 的 RDS 两大开源数据库就是 MySQL ...

  3. .net使用SqlBulkCopy类操作DataTable批量插入数据库数据,然后分页查询坑

    在使用SqlBulkCopy类操作DataTable批量插入数据,这种操作插入数据的效率很高,就会导致每一条数据在保存的时间基本一样,在我们分页查询添加的数据是,使用数据的添加时间来排序就会出现每页的 ...

  4. 批量插入或更新数据(MyBatis-plus框架)

    目录 1.场景说明 2.DUPLICATE 和REPLACE比较 3.批量插入或者更新(两种方式) 方式一:mybatis-plus的saveOrUpdateBatch方法 问题:如果操作类集成了基础 ...

  5. mybatis操作Oracle数据库批量插入与更新、运行注意事项、属性含义

    一.项目需求 针对将近300万用户的用电数据进行统计分析,将结果更新保存Oracle数据库.我需要往一个表里面插入数据,数据量总计在500万条左右.一条一条插入的话非常慢,2万条数据近20分钟,后面就 ...

  6. Hibernate 批量插入、更新与删除

    http://blog.sina.com.cn/s/blog_54829a240100glku.html 批量插入 在项目的开发过程之中,由于项目需求,我们常常需要把大批量的数据插入到数据库.数量级有 ...

  7. php yii 插入,Yii2 批量插入、更新数据实例

    在使用yii2开发项目时,有时候会遇到这样的情况: 向后台发送多条数据,其中一些数据已经存在记录,只需要对其部分字段的值进行修改;而另一部分的数据则需要新添加进去. 这就需要对添加的数据进行判断,其中 ...

  8. mybatis-generator插件使用 批量插入、更新

    1. <dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-g ...

  9. mysql批量插入跟更新_Mysql批量插入和更新的性能-问答-阿里云开发者社区-阿里云...

    利用Hibernate,连接池使用的是BoneCP,做了一个MySql批量插入和批量更新的Demo,出现了下面两个问题. 1.批量插入.我采用的是原生态的JDBC,每次批量插入60条数据左右(数据量不 ...

最新文章

  1. CentOS 6.5 下Vim 配置图解
  2. EnterpriseDB Migration 迁移工具使用测试(2)
  3. PL/SQL -- INSTEAD OF 触发器
  4. 中科大计算机专业跟浙江大学计算机专业相比,浙大计算机研究生近年录报比与中国科学技术大学的比较...
  5. 深入理解计算机系统(3)
  6. HttpURLConnection发送post请求信息
  7. 别再说PHP已死了,它活得好着呢
  8. $.countdown is not a function
  9. Replication--复制延迟的诊断和解决
  10. 探测远程主机操作系统指纹的全新技术
  11. [转载] 了解Node.js-to-Angular 套件组件
  12. play home tifa_144Hz OLED屏手机 努比亚Play喜提Android 11_手机通讯
  13. 【机器学习】Tensorflow基本使用
  14. Backup Exec启动时,系统报“CLR20r3“错误
  15. 51单片机跑马灯程序
  16. 程序员必会10种算法
  17. silvaco的石墨烯fet仿真_高灵敏度表面等离子体光纤传感器仿真设计(二)
  18. 695. 岛屿的最大面积
  19. 微信小程序简易音频播放器(wx.getBackgroundAudioManager())
  20. FL Studio20.9中文版最详细的安装激活教程

热门文章

  1. iOS架构-静态库.a的打包及使用(2)
  2. swift_044(Swift 计算属性和存储属性的概念以及使用)
  3. execute taskaction$gradle怎么解决_Spring 源码中设计模式?怎么回答面试官才稳?
  4. 【POJ】1026.Cipher
  5. 首字母大写 -freeCodeCamp
  6. ZooKeeper原理及使用
  7. JavaWeb学习总结(十二)--事务
  8. asp.net导出到Excel的最佳选择
  9. 数据规范化理论(2NF,3NF,BCNF)[zz]
  10. PHP使用文件锁解决高并发问题示例