程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> MySoft.Data從入門到精通系列(三)【DbSession的配置】

MySoft.Data從入門到精通系列(三)【DbSession的配置】

編輯:關於.NET

DbSession(數據會話類)是數據操作的核心,所有數據庫的操作都通過它來完成,所以在編寫數據庫訪問層之前得實例化DbSession對象。

下面我們就來認識一下這個DbSession對象。

一、DbSession實例化配置

DbSession兩有種方式來進行實例化

1、通過配置文件創建

//指定connectionStrings節的名稱來實例化DbSession
public DbSession(string connectName);

這種方式一般用於已經配置好connectionStrings節的用戶,如下所示:

<connectionStrings>
     <add name="DataExample" connectionString="Server=(local);Database=Northwind;Uid=sa;Pwd=sa;"
          providerName="MySoft.Data.SqlServer9.SqlServer9Provider" />
   </connectionStrings>

上面的配置節如果是Web項目,則在web.config中指定,如果是winform項目,則在app.config中的指定

後面的providerName指定數據庫鏈接所使用的驅動。

上面的配置方式只針對.net已經支持的驅動,如Access,SqlServer,Oracle

默認程序集為MySoft.Data.dll

如果是MySql,Firebird,SQLite需要額外的程序集支持,就需要按如下配置:

<connectionStrings>
     <add name="DataExample" connectionString="Server=(local);Database=Northwind;Uid=sa;Pwd=sa;"
          providerName="MySoft.Data.MySql.MySqlProvider, MySoft.Data.MySql" />
   </connectionStrings>

providerName的寫法是前面className,後面跟assemblyName。

而且需要添加相關的驅動,如:MySql需要添加MySql.Data.dll與MySoft.Data.MySql.dll

2、通過動態創建DbProvider

//通過創建驅動的方式來實例化DbSession
public DbSession(DbProvider dbProvider);

這種方式一般用於需要動態創建會話對象的用戶

DbProvider是一個抽象類,用戶還可以自行擴展此驅動。

動態創建DbProvider來實例化DbSession會話:

A、可以傳入connectionName來創建驅動,此時connectionName配置節可以不用寫providerName;

DbProvider provider = ProviderFactory.CreateDbProvider("DataExample", ProviderType.SqlServer9);
DbSession DataExample = new DbSession(provider);

B、通過傳入connectionString來創建驅動,內部ProviderType枚舉已經將支持的驅動羅列出來。

DbProvider provider = ProviderFactory.CreateDbProvider(ProviderType.SqlServer9,
                       "Server=(local);Database=Northwind;Uid=sa;Pwd=sa;");
DbSession DataExample = new DbSession(provider);

C、如果是用戶自已實現的驅動,可以通過第三種方式來創建驅動。

DbProvider provider = ProviderFactory.CreateDbProvider(string assemblyName, string className,
                       string connectionString);
DbSession DataExample = new DbSession(provider);

不過對於一般用於,通過內置的驅動已經完全夠用了。

二、DbSession自定義實例化

DbSession實例化有兩種方式,直接實例化DbSession,如果內置的DbSession.Default就是其中一種。

DbSession.Default:

這是DbSession內部一個靜態的DbSession對象,默認創建自connectionStrings中的最後一個配置節中的數據庫鏈接,如果providerName為空,將默認為SqlServer2000.

下面就講一下如何來實例化DbSession來進行數據的訪問

新建一個MySoftExample.Web項目。

然後新建一個DataAccess的類,用來進行數據的訪問類,名字可以自己定義。

講解也比較費事,直接貼上代碼:

實例化DbSession

/// <summary>
     /// 數據庫訪問類
     /// </summary>
     public static class DataAccess
     {
         /// <summary>
         /// 通過配置節來實例化DbSession
         /// </summary>
         public static readonly DbSession DefaultSession = new DbSession("DataExample");
         /// <summary>
         /// 通過自定義類來實例化DbSession
         /// </summary>
         public static readonly DataExample ExampleSession = new DataExample();
     }
     /// <summary>
     /// DataExample會話類
     /// </summary>
     public class DataExample : DbSession
     {
         public DataExample()
             : base("DataExample")
         {
             this.RegisterSqlLogger(log =>
                 {
                     System.IO.File.WriteAllText("c:\\log.txt", log);
                 });
         }
     }

進行以上配置後,用戶可以有三種方式來操作數據,效果都一樣的:

只不過ExampleSession操作數據庫會寫日志到c:\\log.txt文件。

User user = new User() { name = “張三"" };
     DbSession.Default.Save(user);
     DataAccess.DefaultSession.Save(user);
     DataAccess.ExampleSession.Save(user);

通過繼承可以很方便的實現注冊寫日志事件。而且對外顯示的名字為DataExample,這樣是否顯得更加清晰和雅觀呢。

如果不需要寫日志,將注冊事件的代碼注釋掉即可,還有一種方式是通過宏的方式,如下:

注冊日志事件

/// <summary>
     /// DataExample會話類
     /// </summary>
     public class DataExample : DbSession
     {
         public DataExample()
             : base("DataExample")
         {
#if DEBUG
             this.RegisterSqlLogger(log =>
                 {
                     System.IO.File.WriteAllText("c:\\log.txt", log);
                 });
#endif
         }
     }

這樣在Release模式下注冊事件的代碼將失效,這樣便於在Debug模式下調試,發布時就不需要寫日志了。

DbSession的配置就講解到這裡,下一章將講述如何使用DbSession來進行數據插入操作!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved