数据库组件 Hxj.Data (十八) (批处理)

批处理就是提交的脚本不是马上执行,而是到一定数量才提交。

还是先上例子

using (DbBatch batch = DbSession.Default.BeginBatchConnection())
{
     batch.Update<Products>(Products._.ProductName, "apple", Products._.ProductID == 1);
     batch.Update<Products>(Products._.ProductName, "pear", Products._.ProductID == 2);
     batch.Update<Products>(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>(Products._.ProductName, "apple", Products._.ProductID == 1);
     batch.Update<Products>(Products._.ProductName, "pear", Products._.ProductID == 2);
     batch.Execute();
     batch.Update<Products>(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>(Products._.ProductName, "apple1", Products._.ProductID == 1);
     batch.Update<Products>(Products._.ProductName, "pear1", Products._.ProductID == 2);
     batch.Update<Products>(Products._.ProductName, "orange1", Products._.ProductID == 3);
}
catch
{
     //do something
}
finally
{
     batch.Close();
}

效果和第一个例子是一样的。

批处理也是比较简单的。

时间: 2024-11-16 21:53:23

数据库组件 Hxj.Data (十八) (批处理)的相关文章

数据库组件 Hxj.Data (八)(存储过程篇)

上一节讲述的sql语句的执行,本节将讲述的是存储过程的执行. 执行存储过程是通过FromProc方法来完成的. 执行无参数存储过程如下: DbSession.Default.FromProc("Ten Most Expensive Products").ToDataTable(); "Ten Most Expensive Products"就是存储过程名称. 执行带参数的存储过程: DbSession.Default.FromProc("Sales by

数据库组件 Hxj.Data (二十八)

数据库组件 Hxj.Data (二十八)(事务中的查询,查询字段字中的子查询,WhereClip的隐式转换) 本节讲述新版本中新加的功能,以及如何使用. 事务中的查询 应用场景,有时我们需要事务更新.添加.删除表的操作,在提交事务又需要对这些进行查询(不想 降低事务级别让其他连接查询事务中的数据变动),在事务内部进行的查询. 其实只是在DbTrans中增加了FromSection方法. 示例代码如下: using (DbTrans trans = DbSession.Default.BeginT

数据库组件 Hxj.Data (二十五)(数据库连接配置

本节补充讲述connectionStrings的设置. 组件读取connectionStrings节点的配置的时候会根据providerName来判断是哪个数据库. 数据库 providerName Sql server 2000 1.System.Data.SqlClient 2.Hxj.Data.SqlServer Sql server 2005 Hxj.Data.SqlServer9 MS Access Hxj.Data.MsAccess Sqlite 1.System.Data.SQLi

数据库组件 Hxj.Data (二十四)(Sqlite数据库)

Hxj.Data(V1.3)组件增加了对Sqlite数据库的支持. 以及实体生成工具也同时发布(V1.3)版本支持Sqlite数据库的实体生成. 使用Sqlite数据库开发,需要引用Hxj.Data.Hxj.Data.Sqlite.System.Data.SQLite这三个DLL. config配置数据库连接例如: <add name="SqliteConnectionString" connectionString="Data Source=C:\sqldb.db&q

数据库组件 Hxj.Data (二十二) (缓存)

首先我是做web开发的,所以很多会偏向web的,组件使用的缓存是System.Web.HttpRuntime.Cache. 组件在默认情况下是关闭缓存的. 所以要开启缓存查询要做一下配置. 先看一下例子配置: <configSections> <section name="HxjCacheConfig" type="Hxj.Data.CacheConfiguration,Hxj.Data"/> </configSections>

数据库组件 Hxj.Data (二十六)(Oracle配置)

Oracle配置在connectionStrings节点的providerName为System.Data.OracleClient或者 Hxj.Data.Oracle之外,其他操作使用并没有什么不同. 不过相对于Oracle的自增长列有所不同,要做适当的处理. Oracle是通过Sequence来获取增长的值,不同于Sql Server可以方便的设置列的自增长. 在这里通过修改生成的实体就可以完成自增长列的设置. 例如: 建了一个Sequence,名为:mysequence 表中需要自增的字段

数据库组件 Hxj.Data (三十一)(MySQL篇)

组件V1.7版本增加对MySQL的支持(测试了MySQL 5.1版本). 下面来演示如何使用. 首先添加Connectionstring <add name="MySQLConnectionString" connectionString="server=192.168.1.175;user id=root; password=huxj; Port=3306;database=test;" providerName="Hxj.Data.MySql&q

数据库组件 Hxj.Data (三)(查询操作篇)

Hxj.Data使用入口在Hxj.Data.DbSession,DbSession类封装常用的操作,比如: From<T>,Insert<T>,Update<T>,Delete<T>等常用方法. DbSession.Default是一个默认的DbSession.在默认情况下会自动读取web.config/app.config配置文件中connectionStrings节点的最后一 个配置. 可以通过条用DbSession的SetDefault方法来修改这个D

数据库组件 Hxj.Data (一)(介绍篇)

Hxj.Data经过几个月的开发,终于发布了一个版本,并同时发布实体生成工具.在开发过程参考了多个ORM框架,特别是NBear,MySoft等. 吸取了他们的一些精华,加入自己的新思想. 目前支持Sql2000\2005,MsAccess,Oracle三个数据库,如有需要可再扩展. 数据库实体生成的代码Northwind数据库中Products表: //------------------------------------------------------------------------

数据库组件 Hxj.Data (二十七)(字段组合更新)

Hxj.Data V1.5.1版本开始支持字段组合更新. 例如:update table set a=b+c update table set a=a+1 (+.-.*./.%)依次类推. 下面将举具体的例子.(例子只是为了测试效果,没有实际意义) 例一. DbSession.Default.Update<Products>(Products._.UnitPrice, Products._.ReorderLevel + Products._.UnitPrice, Products._.Prod