当前位置: 编程技术>.net/c#/asp.net
c#批量插入上万条数据到mysql中的方法
来源: 互联网 发布时间:2014-08-30
本文导语: 本节主要内容: 批量插入上万条数据到mysql的方法 本文使用了mysql的批量数据格式,例如: INSERT INTO TABLES (LABLE1,LABLE2,LABLE3,...) VALUES(NUM11,NUM12,NUM13,...), (NUM21,NUM22,NUM23,...), .... (NUMn1,NUMn2,NUMn3,..); 每个账户的每个采集点就会...
本节主要内容:
批量插入上万条数据到mysql的方法
本文使用了mysql的批量数据格式,例如:
INSERT INTO TABLES (LABLE1,LABLE2,LABLE3,...)
VALUES(NUM11,NUM12,NUM13,...),
(NUM21,NUM22,NUM23,...),
....
(NUMn1,NUMn2,NUMn3,..);
VALUES(NUM11,NUM12,NUM13,...),
(NUM21,NUM22,NUM23,...),
....
(NUMn1,NUMn2,NUMn3,..);
每个账户的每个采集点就会生成几百个数据,这几百个数据我组合成上述一条语句,20多个账户多个采集点我一共生成上述语句300--800多条,每条的数据项300-500个,所以每次插入的数据共计10000--50000条。
把每条insert语句都保存在一个SQLStringList之中,采用了事务处理方式,本来事务方式是所有sql语句放在一个事务里,但有热心朋友告知“每当执行1000条DBCommand就提交 (Commit)事务,然后再次开启事务,这样比较好。
把过多的命令放在一个事务中,一旦超过物理内存分配限制,你的程序会变得很慢很慢。”
作了如下的修改:
每500条语句重启一次事务。
例子:
代码示例:
///
/// 执行多条SQL语句,实现数据库事务。
/// mysql数据库
/// 多条SQL语句
public static void ExecuteSqlTran(List SQLStringList)
{
using (MySqlConnection conn = new MySqlConnection(MySqlHelper.ConnStr))
{
// www.
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);
}
}
}
/// 执行多条SQL语句,实现数据库事务。
/// mysql数据库
/// 多条SQL语句
public static void ExecuteSqlTran(List SQLStringList)
{
using (MySqlConnection conn = new MySqlConnection(MySqlHelper.ConnStr))
{
// www.
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);
}
}
}