数据库组件 Hxj.Data (二十九)(DbSession的推荐写法)

在系列文章中的示例都是DbSession.Default做为操作数据的入口。

Default是读取config文件中connectionStrings节点的最后一个节点的配置。

在实际项目中还是推荐创建一个DbSession。

可以如下写法:

public class Db
{
public readonly static DbSession Northwind = new DbSession ("NorthwindConnectionString");
static Db()
{
Northwind.RegisterSqlLogger(delegate(string sql)
{
File.AppendAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "sqllog.txt"), sql);
});
}
}

这样就是以 Db.Northwind 作为入口啦。项目中会存在多个连接,也参考类似写法既可。其中静态构 造函数里面是注册事件来记录执行sql的脚本,以方便调试查看。不过这样的话日志文件会越来越大,所 以写日志sql的方法需要再修改一下,如果不需要记录日志则这段代码注释了即可。当然使用log4net来写 ,就不需要考虑那么多啦。

Northwind.RegisterSqlLogger(delegate(string sql)
{
Hxj.Common.Log4net.debug(sql);
});

本节完。

时间: 2024-10-01 21:29:37

数据库组件 Hxj.Data (二十九)(DbSession的推荐写法)的相关文章

数据库组件 Hxj.Data (十九) (事务二)

对事务有进行了更新,又得去下载一下新版本,对上一版本兼容,扩充了DbTrans方法. 相比十七节(事务)中的事务写法简洁了一些.如下 using (DbTrans trans = DbSession.Default.BeginTransaction()) { trans.Update<Products>(Products._.ProductName, "apple", Products._.ProductID == 1); trans.Update<Products&

数据库组件 Hxj.Data (十二) (模糊查询、简单的in,not in查询)

条件的生成都是通过对表中字段进行的. 比如: Products._.UnitPrice > 1 Products._.CategoryID == 2 这些是简单的比较. 下面来介绍通过like 模糊查询该怎么做. 先上代码, Products._.ProductName.Contain("apple") 这句等效sql就是(sqlserver) productname like '%apple%' 就是完全模糊搜索. Products._.ProductName.BeginWit

数据库组件 Hxj.Data (十六) (查询的字段)

在查询没有设置查询字段,组件默认是返回所有字段信息,即select * from table 那在查询中如何设置需要返回的字段信息呢? 在之前几节中的例子已经存在设置查询字段,是通过 select方法来设置的. 先上例子: DbSession.Default.From<Products>() .Select(Products._.ProductID, Products._.ProductName) .ToDataTable(); 这里是设置查询只返回productid和productname两

数据库组件 Hxj.Data (十五) (查询的排序、分组)

本节将讲述查询的排序(order by) 和 分组(group by). 先说排序 在分页中如果没有指定排序,组件会默认一个排序来实现分页. 例如 DbSession.Default.From<Products>() .Page(10, 2) .Where(Products._.CategoryID.SelectIn(1, 2, 3)) .ToList(); 生成的sql如下: Text: SELECT * FROM ( SELECT TOP 10 * FROM ( SELECT TOP 20

数据库组件 Hxj.Data (十) (输出组件执行的sql)

前面有TX留言问分页的sql是怎么样的,看完这篇你也就知道了. 组件可以输出执行的sql,方便查看sql生成的语句是否有问题. 通过注册事件来输出sql DbSession.Default.RegisterSqlLogger(database_OnLog); private string sql; void database_OnLog(string logMsg) { //保存执行的DbCommand (sql语句和参数) sql += "<br />" + logMsg

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

批处理就是提交的脚本不是马上执行,而是到一定数量才提交. 还是先上例子 using (DbBatch batch = DbSession.Default.BeginBatchConnection()) { batch.Update<Products>(Products._.ProductName, "apple", Products._.ProductID == 1); batch.Update<Products>(Products._.ProductName,

数据库组件 Hxj.Data (十四) (联合查询)

联合查询在前面的例子中已经出现过,只不过没有细说. 先来个例子吧 DbSession.Default.From<Customers>() .InnerJoin<Orders>(Customers._.CustomerID == Orders._.CustomerID) .ToDataTable(); 生成的sql Text: SELECT * FROM [Customers] INNER JOIN [Orders] ON ([Customers].[CustomerID] = [O

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

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

数据库组件 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 (二十四)(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