也可以设置事务的级别,如下:
DbTrans trans =
DbSession.Default.BeginTransaction(IsolationLevel.ReadCommitted); 总的来说组件对事务封装的比较简单,写起来似乎不是特别方便,有待进一步的改进。
在使用过程中觉得不方便或者需要改进的希望大家能提出来,谢谢。 下一节将讲述批处理。
数据库组件 Hxj.Data (十八) (批处理)
批处理就是提交的脚本不是马上执行,而是到一定数量才提交。 还是先上例子
using (DbBatch batch = DbSession.Default.BeginBatchConnection()) {
batch.Update
batch.Update
batch.Update
生成的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
37
默认是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
batch.Update
batch.Update
执行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;
38
Parameters: @c3a36b7a94754cd884ee27d4e42199a5[String] = orange @550ebc4788f54105ababe5d6bdc9cf2a[Int32] = 3
看输出的脚本分两次执行的。 try catch的写法如下:
DbBatch batch = DbSession.Default.BeginBatchConnection(); try {
batch.Update
batch.Update
batch.Update
//do something }
finally {
batch.Close(); }
效果和第一个例子是一样的。 批处理也是比较简单的。
数据库组件 Hxj.Data (十九) (事务二)
对事务有进行了更新,又得去下载一下新版本,对上一版本兼容,扩充了DbTrans方法。
相比十七节(事务)中的事务写法简洁了一些。如下
using (DbTrans trans = DbSession.Default.BeginTransaction()) {
trans.Update
trans.Update
39
trans.Commit(); }
生成的sql:
Text:
UPDATE [Products] SET [ProductName]=@e6b783222bb34b98b56fc3012500a0d5 WHERE [Products].[ProductID] = @bdb38c8f8fab405d93231e1b2f19c1e2
Parameters:
@e6b783222bb34b98b56fc3012500a0d5[String] = apple @bdb38c8f8fab405d93231e1b2f19c1e2[Int32] = 1 Text:
UPDATE [Products] SET [ProductName]=@4184e5de4ed545d9bf3f0ba9a38ed6fa WHERE [Products].[ProductID] = @f1da00f3628a43c2a9c66678e71049c7
Parameters:
@4184e5de4ed545d9bf3f0ba9a38ed6fa[String] = egg @f1da00f3628a43c2a9c66678e71049c7[Int32] = 2
执行效果是一样的。
try catch的写法也是一样的。
DbTrans trans = DbSession.Default.BeginTransaction(); try {
trans.Update
trans.Update
trans.Commit(); } catch {
trans.Rollback(); }
finally {
trans.Close(); }
组件中的事务并不是分布式事务,只是简单的事务封装。
40