本节主要内容:
批量插入上万条数据到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);  
}  
    }  
}