数据库组件 Hxj.Data (十八) (批处理)
2010-06-01 20:10
253 查看
批处理就是提交的脚本不是马上执行,而是到一定数量才提交。
还是先上例子
using (DbBatch batch = DbSession.Default.BeginBatchConnection()) { batch.Update(Products._.ProductName, "apple", Products._.ProductID == 1); batch.Update (Products._.ProductName, "pear", Products._.ProductID == 2); batch.Update (Products._.ProductName, "orange", Products._.ProductID == 3); }
生成的sql:
Text: UPDATE [Products] SET [ProductName]=@3d40ca14f83644f18269874c99e621a5 WHERE [Products].[ProductID] = @50999b135fbf4f068f89bda7ab341ac3; UPDATE [Products] SET [ProductName]=@fe1ea91dd6e14260813ea19abbc245eb WHERE [Products].[ProductID] = @6bef4d78041549fa817c3363bd847d41; UPDATE [Products] SET [ProductName]=@075f1b4639c446be88bfc33638b1f754 WHERE [Products].[ProductID] = @588a5481ff3d4ff58fc304293173b6ab; Parameters: @3d40ca14f83644f18269874c99e621a5[String] = apple @50999b135fbf4f068f89bda7ab341ac3[Int32] = 1 @fe1ea91dd6e14260813ea19abbc245eb[String] = pear @6bef4d78041549fa817c3363bd847d41[Int32] = 2 @075f1b4639c446be88bfc33638b1f754[String] = orange @588a5481ff3d4ff58fc304293173b6ab[Int32] = 3
默认是10条sql执行一次。也可以自定义。
DbBatch batch = DbSession.Default.BeginBatchConnection(20)
这样就设置了20条sql执行一次。
并可以设置内部事务级别.
DbBatchbatch = DbSession.Default.BeginBatchConnection(20, IsolationLevel.ReadCommitted)
也可强制性执行:
using (DbBatch batch = DbSession.Default.BeginBatchConnection()) { batch.Update(Products._.ProductName, "apple", Products._.ProductID == 1); batch.Update (Products._.ProductName, "pear", Products._.ProductID == 2); batch.Execute(); batch.Update (Products._.ProductName, "orange", Products._.ProductID == 3); }
执行batch.Execute(),就会将之前的sql脚本先提交。
生成的sql:
Text: UPDATE [Products] SET [ProductName]=@1ae514d0db3247acb196b8d55110a8e8 WHERE [Products].[ProductID] = @c694d46594324eec9db0d1e26a3ea499; UPDATE [Products] SET [ProductName]=@4b1d4e07b6cc45d994e65c5eeac12619 WHERE [Products].[ProductID] = @58fa8ceaede745f0ac541d5c45574309; Parameters: @1ae514d0db3247acb196b8d55110a8e8[String] = apple @c694d46594324eec9db0d1e26a3ea499[Int32] = 1 @4b1d4e07b6cc45d994e65c5eeac12619[String] = pear @58fa8ceaede745f0ac541d5c45574309[Int32] = 2 Text: UPDATE [Products] SET [ProductName]=@c3a36b7a94754cd884ee27d4e42199a5 WHERE [Products].[ProductID] = @550ebc4788f54105ababe5d6bdc9cf2a; Parameters: @c3a36b7a94754cd884ee27d4e42199a5[String] = orange @550ebc4788f54105ababe5d6bdc9cf2a[Int32] = 3
看输出的脚本分两次执行的。
try catch的写法如下:
DbBatch batch = DbSession.Default.BeginBatchConnection(); try { batch.Update(Products._.ProductName, "apple1", Products._.ProductID == 1); batch.Update (Products._.ProductName, "pear1", Products._.ProductID == 2); batch.Update (Products._.ProductName, "orange1", Products._.ProductID == 3); } catch { //do something } finally { batch.Close(); }
效果和第一个例子是一样的。
批处理也是比较简单的。
相关文章推荐
- 数据库组件 Hxj.Data (十八) (批处理)
- 数据库组件 Hxj.Data (二)(实体生成工具)
- 数据库组件 Hxj.Data (十) (输出组件执行的sql)
- 数据库组件 Hxj.Data (十三) (子查询)
- 数据库组件 Hxj.Data (二十) (分页)
- 数据库组件 Hxj.Data (六)(删除操作篇)
- 数据库组件 Hxj.Data(七) (sql篇)
- 数据库组件 Hxj.Data (九) (DbSession的其他介绍)
- 数据库组件 Hxj.Data (十) (输出组件执行的sql)
- 数据库组件 Hxj.Data (十六) (查询的字段)
- 数据库组件 Hxj.Data (十七) (事务)
- 数据库组件 Hxj.Data (一)(介绍篇)
- 数据库组件 Hxj.Data (十四) (联合查询)
- 数据库组件 Hxj.Data (二十二) (缓存)
- 数据库组件 Hxj.Data (二十三) (自定义缓存)
- 数据库组件 Hxj.Data 系列目录
- 数据库组件 Hxj.Data (十一) (where条件)
- 数据库组件 Hxj.Data (十二) (模糊查询、简单的in,not in查询)
- 数据库组件 Hxj.Data (二十七)(字段组合更新)
- 数据库组件 Hxj.Data (一)(介绍篇)