c# mysql 批量插入_c#中往mysql里批量插入上万条数据 zt

在csdn询问,http://bbs.csdn.net/topics/390357952?page=1#post-393577221,综合采纳了各位大侠的意见,反正最后我在本机上插入1--5万条数据的时候,好像没感觉到占用什么时间。

我使用了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条语句重启一次事务。c#代码如下:

/// 

/// 执行多条SQL语句,实现数据库事务。

/// mysql数据库

/// 多条SQL语句

publicstaticvoidExecuteSqlTran(List SQLStringList)

{

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

{

conn.Open();

MySqlCommand cmd = newMySqlCommand();

cmd.Connection = conn;

MySqlTransaction tx = conn.BeginTransaction();

cmd.Transaction = tx;

try

{

for(intn = 0; n 

{

stringstrsql = 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();

thrownewException(E.Message);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值