EntLib(二)创建数据库实例的工厂方法


在第一篇文章的基础上,笔者又写了一个创建数据库实例的工厂类。此类采用注册(Register)/创建(Create)的方式。注册方法用来向工厂类注册数据库连接,创建方法用来创建数据库连接的实例(对象)。

注册方法包括如下三种:
1.根据EntLib配置文件中的默认数据库配置节注册
2.根据ConnectionStrings配置节中的数据库连接注册
3.直接指定数据库连接字符串和数据提供者名称注册

创建方法包括两种:
1.直接创建默认数据库连接实例
2.根据注册名创建数据库实例

创建数据库连接实例工厂类代码如下:

Imports Microsoft.Practices.EnterpriseLibrary.Data
Imports System.Configuration
Imports System.Data.Common

Public NotInheritable Class DbFactory

Private Const CDefault As String = "Default"

Private Shared _db As New Dictionary(Of String, Database)

Public Shared Sub Register()
If Not _db.ContainsKey(CDefault) Then
Dim db As Database = DatabaseFactory.CreateDatabase()
_db.Add(CDefault, db)
End If
End Sub

Public Shared Sub Register(name As String)
If Not _db.ContainsKey(CDefault) Then
Dim c = From item As ConnectionStringSettings In ConfigurationManager.ConnectionStrings
Where item.Name.Equals(name)
Select item
If c.Count > 0 Then
Dim db As Database = DatabaseFactory.CreateDatabase(name)
_db.Add(name, db)
End If
End If
End Sub

Public Shared Sub Register(name As String, _
connectionString As String, _
providerName As String)
If Not _db.ContainsKey(name) Then
Dim db As Database = New GenericDatabase(connectionString, DbProviderFactories.GetFactory(providerName))
_db.Add(name, db)
End If
End Sub

Public Shared Function Create() As Database
Return Create(CDefault)
End Function

Public Shared Function Create(name As String) As Database
If Not _db.ContainsKey(name) Then
Throw New ArgumentException()
End If
Return _db.Item(name)
End Function

End Class

使用示例:

Imports Microsoft.Practices.EnterpriseLibrary.Data
Imports System.Transactions
Imports System.Data.Common
Imports System.Configuration

Module Module1

Sub Main()
DbFactory.Register("LocalSqlServer")
Dim db As Database = DbFactory.Create("LocalSqlServer")

Using t As New TransactionScope
Dim cmd As DbCommand = db.GetSqlStringCommand("SELECT * FROM SYS_User")
Dim ds As DataSet = db.ExecuteDataSet(cmd)
Console.WriteLine(ds.GetXml())
End Using
Console.ReadLine()
End Sub

End Module

我们可以通过这种注册/创建的方式创建连接多个及多种数据库连接的实例,方便系统中进行多维度的数据访问。

优质内容筛选与推荐>>
1、Office IBF ALL SDK[]
2、同时支持多语言,多种数据库的多用博客提供下载 i-favourite 1.5
3、电力行业--智能电表自助充值
4、Java并发编程实战
5、一天一点新东西-jq插件写法


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn