c#批量插入上万条数据到mysql中的方法

发布时间:2019-09-06编辑:脚本学堂
本文介绍下,如何在c#代码中将上万条数据批量插入到mysql数据库中的方法,有需要的朋友参考下。

本节主要内容:
批量插入上万条数据到mysql的方法

本文使用了mysql的批量数据格式,例如:
 

INSERT INTO TABLES (LABLE1,LABLE2,LABLE3,...)
VALUES(NUM11,NUM12,NUM13,...),
(NUM21,NUM22,NUM23,...),
....
(NUMn1,NUMn2,NUMn3,..);

每个账户的每个采集点就会生成几百个数据,这几百个数据我组合成上述一条语句,20多个账户多个采集点我一共生成上述语句300--800多条,每条的数据项300-500个,所以每次插入的数据共计10000--50000条。

把每条insert语句都保存在一个SQLStringList之中,采用了事务处理方式,本来事务方式是所有sql语句放在一个事务里,但有热心朋友告知“每当执行1000条DBCommand就提交 (Commit)事务,然后再次开启事务,这样比较好。
把过多的命令放在一个事务中,一旦超过物理内存分配限制,你的程序会变得很慢很慢。”

作了如下的修改:
每500条语句重启一次事务。

例子:
 

复制代码 代码示例:
/// <summary> 
/// 执行多条SQL语句,实现数据库事务。 
/// </summary>mysql数据库 
/// <param name="SQLStringList">多条SQL语句</param> 
public static void ExecuteSqlTran(List<string> SQLStringList) 

    using (MySqlConnection conn = new MySqlConnection(MySqlHelper.ConnStr)) 

// www.jb200.com
conn.Open(); 
MySqlCommand cmd = new MySqlCommand(); 
cmd.Connection = conn; 
MySqlTransaction tx = conn.BeginTransaction(); 
cmd.Transaction = tx; 
try 

    for (int n = 0; n < SQLStringList.Count; n++) 
    { 
string strsql = SQLStringList[n].ToString(); 
if (strsql.Trim().Length > 1) 

    cmd.CommandText = strsql; 
    cmd.ExecuteNonQuery(); 

       //后来加上的 
       if (n > 0 && (n % 500 == 0 || n == SQLStringList.Count - 1)) 

    tx.Commit(); 
    tx = conn.BeginTransaction(); 

    } 
    //tx.Commit();//原来一次性提交 

catch (System.Data.SqlClient.SqlException E) 

    tx.Rollback(); 
    throw new Exception(E.Message); 

    }