日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

“Zhuang.Data”轻型数据库访问框架(二)框架的入口DbAccessor对象

發布時間:2025/4/16 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 “Zhuang.Data”轻型数据库访问框架(二)框架的入口DbAccessor对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄:

“Zhuang.Data”輕型數據庫訪問框架(一)開篇介紹

“Zhuang.Data”輕型數據庫訪問框架(二)框架的入口DbAccessor對象

?

?

先來看一段代碼

DbAccessor dba = DbAccessor.Create();var dt = dba.QueryDataTable("select * from sys_product where productid=#Id#",new {Id=1});Console.WriteLine(DataTableUtil.ToString(dt));

實際執行的sql

exec sp_executesql N'select * from sys_product where productid=@Id',N'@Id int',@Id=1

?DbAccessor抽象類

DbAccessor是一個抽象類(不同數據庫會對應具體的實現類,如:SqlServerAccessor、OracleAccessor和MySqlAccessor),該類封裝了許多用來執行sql的方法,如:Execute、ExecuteReader、ExecuteScalar、QueryDataSet、QueryDataTable和QueryEntities等方法。也就是說只要有了該抽象類的一個對象就可以使用以上的方法,那么如何能得到一個DbAccessor對象呢?DbAccessorFactory這個工廠類就是專門用來創建DbAccessor對象的,其實上面代碼上的DbAccessor.Create()方法也是去調用DbAccessorFactory.Create()去得一個DbAccessor對象的。

DbAccessorFactory工廠類

public static DbAccessor NewDbAccessor(string connectionString, string providerName){DbAccessor dba = null;if (string.IsNullOrEmpty(providerName)|| providerName == "System.Data.SqlClient"|| providerName.ToLower() == DbProviderName.SqlServer.ToString().ToLower()){dba = new SqlServerAccessor(connectionString);EvnValService.SetDbAccessorDbProviderName(dba, DbProviderName.SqlServer);}else if (providerName.ToLower() == DbProviderName.Oracle.ToString().ToLower()){dba = new OracleAccessor(connectionString);EvnValService.SetDbAccessorDbProviderName(dba, DbProviderName.Oracle);}else if (providerName.ToLower() == DbProviderName.MySql.ToString().ToLower()){dba = new MySqlAccessor(connectionString);EvnValService.SetDbAccessorDbProviderName(dba, DbProviderName.MySql);}else{Type tProviderName = Type.GetType(providerName);if (tProviderName == null){throw new Exception(string.Format("ConnectionString({0})的ProviderName({1})找不到該類型!", connectionString, providerName));}else if (!(tProviderName.IsSubclassOf(typeof(DbAccessor)))){throw new Exception(string.Format("ConnectionString({0})的ProviderName({1})該類型不是DbAccessor的實現類!", connectionString, providerName));}object oProviderName = Activator.CreateInstance(tProviderName, connectionString);dba = oProviderName as DbAccessor;}return dba;}

以上代碼DbAccessorFactory類中一個方法,方法所做的就是,根據App.config或Web.config中配置中connectionString配置去創建具體的DbAccessor實現類

<connectionStrings><add name="DefaultDb" connectionString="Data Source=127.0.0.1;Initial Catalog=zhuangdb;Persist Security Info=True;User ID=sa; PassWord=zwb"providerName="sqlserver"/><add name="MySqlDb" connectionString="Data Source=192.168.121.130;Initial Catalog=zhuangdb;Persist Security Info=True;User ID=root; PassWord=zwb"providerName="mysql"/><add name="OracleDb" connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.126.129)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=xe)));User Id=zhuangdb;Password=zwb;"providerName="oracle"/></connectionStrings>

connectionString配置中有一個providerName的屬性,DbAccessorFactory會根據這里配置是什么數據庫provider去創建具體對應的數據庫DbAccessor實現類,如:當

providerName="sqlserver"時工廠創建出來的是一個SqlServerAccessor類的實例。

DbAccessorFactory類常用方法介紹

1、GetDbAccessor()

得到一個DbAccessor單例對象;

2、CreateDbAccessor()

創建一個新的DbAccessor對象,當前需要使用事務時候需要創建新的對象而不能使用單例;

3、CreateDbAccessor(string name)

創建一個新的DbAccessor對象,參數“name”對應配置文件中connectionStrings配置中的項置項名稱(如果沒有指定name的值的話將會自動取一個默認值“DefaultDb”);

?

未完,待續……

?

轉載于:https://www.cnblogs.com/zwbblog/p/4978955.html

總結

以上是生活随笔為你收集整理的“Zhuang.Data”轻型数据库访问框架(二)框架的入口DbAccessor对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。