deerchao的blog

Be and aware who you are.

System.Data.Sqlite批量添加数据

今天遇到了往Sqlite数据库里插入1400多条数据的情况,结果每次都需要一两分钟才能完成.
搜索了一下,在这里找到了解决办法,所需要的时间直接变成不到2秒!

internal static void FastInsertMany(DbConnection cnn)

{

using (DbTransaction dbTrans = cnn.BeginTransaction())

{

using (DbCommand cmd = cnn.CreateCommand())

{

cmd.CommandText = "INSERT INTO TestCase(MyValue) VALUES(?)";

DbParameter Field1 = cmd.CreateParameter();

cmd.Parameters.Add(Field1);

for (int n = 0; n < 100000; n++)

{

Field1.Value = n + 100000;

cmd.ExecuteNonQuery();

}

}

dbTrans.Commit();

}

}


posted on 2007-08-22 23:34 deerchao 阅读(599) 评论(5)  编辑 收藏 网摘

评论

#1楼  2007-08-26 09:24 admin [未注册用户]

这里看不出什么东西
全部帖出看看   回复  引用    

#2楼  2008-02-03 14:00 dreamsea [未注册用户]

我明白blog主的意思

原来花两分钟是由于ExecuteNonQuery方法执行时自己提交了更新事务,默认执行更新操作是会自动提交事务的。

更改后的代码把所有的更新SQL放在一个事务中,只有执行到Commit方法时才提交事务。

与数据库通信的内容两次完成是一样的,但旧的方法进行了100000次通信,而新方法只进行一次通信

时间当然有差别了……

但上面的代码还是有很大的问题……

如果上述有一条记录插入不成功,那如何处理呢?剩下的不插入(这时会出错,默认是不把后面的插入了)?还是回滚到事务提交之前呢?   回复  引用    

#3楼 [楼主] 2008-02-03 14:14 deerchao      

@dreamsea

如果没有执行到这一句dbTrans.Commit(),而调用了dbTrans.Dispose()的话,肯定是要Rollback的.
而上面的代码中使用了using(dbTrans),所以,无论是否有异常,肯定会调用dbTrans.Dispose()的.
  回复  引用  查看    

#4楼  2008-07-04 15:51 colder [未注册用户]

--引用--------------------------------------------------
deerchao: @dreamsea

如果没有执行到这一句dbTrans.Commit(),而调用了dbTrans.Dispose()的话,肯定是要Rollback的.
而上面的代码中使用了using(dbTrans),所以,无论是否有异常,肯定会调用dbTrans.Dispose()的.

--------------------------------------------------------

听了你的解释 我更糊涂了

无论是否有异常,肯定会调用dbTrans.Dispose(),而调用了dbTrans.Dispose()的话,肯定是要Rollback的.

或许我是断章取义了, 但是你的那个例子是作者2006年写的, 实在是说明不了什么问题, 至少我在做类似的尝试的时候, 问题太多了.   回复  引用    

#5楼 [楼主] 2008-07-06 23:46 deerchao      

@colder
我的意思是,如果有了异常,则不会执行"dbTrans.Commit()"这一句.

而dbTrans在Dispose时,如果没有Commit,自然是要Rollback了.如果已经Commit了,那就什么也不做了.   回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-02-03 14:15 编辑过
Google站内搜索


China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!

相关文章:


相关搜索:
sqlite sql 批量插入 bulk insert

相关链接:


 
<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

公告

给网络添加价值,就是让自己增加价值.

本博客所有内容,均为原创或对互联网已有资源的再加工,希望对你有用.在声明原作者的前提下,你可以任意使用,但本人对其正确性,使用的后果等不做任何担保,也不负任何责任.

正则表达式30分钟入门教程 v2.21 2007-8-3

I Want Spec#!

与我联系

搜索

 

常用链接

留言簿(66)

我管理的小组

我的标签

随笔档案(127)

文章分类(9)

文章档案(9)

新闻档案(9)

Links

积分与排名

最新评论

评论排行榜