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

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

转载于:https://www.cnblogs.com/richardcktsui/archive/2012/02/20/2360432.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值