Enterprise Library2.0数据库自由切换
一.改进
在DAAB1.1里面我们知道Database方法返回或者创建一个DBCommandWrapper对象,而在DAAB2.0里面移除了DBCommandWrapper类,用ADO.NET2.0里面的DBCommand类代替实现类似的功能,这样使得DAAB跟我们的.NET类库的结合更加紧密,回忆一下我们在1.1里面用DBCommandWrapper来访问数据时的代码:
而用了新的DBCommand类之后则变成了:
数据库连接字符串在我们基于数据库的开发永远是少不了的,但是在DAAB1.1下,它所使用的字符串跟我们在.NET类库中使用的连接字符串却是不能共享的,它们分别保存在不同的位置。而在2.0的Data Access Application Block使用了ADO.NET2.0里面<connectionStrings>配置区,这样带来的一个好处是连接字符串可以在Application Block和自定义的.NET类之间共享使用该配置区,如:
二.使用示例
DAAB2.0的配置非常简单,主要有以下几方面的配置:
配置连接字符串
配置默认数据库
添加相关的命名空间:
使用Data Access Application Block进行数据的读取和操作,一般分为三步:
1.创建Database对象
2.提供命令参数,如果需要的话
3.执行命令
下面分别看一下DataAccessQuickStart中提供的一些例子:
执行静态的SQL语句
执行存储过程并传递参数,返回DataSet
利用DataSet更新数据
通过ID获取记录详细信息
以XML格式返回数据
使用事务
三.常见功能
1.创建Database对象
创建一个默认的Database对象
默认的数据库在配置文件中:
创建一个实例Database对象
创建一个具体的类型的数据库对象
2.创建DbCommand对象
静态的SQL语句创建一个DbCommand
存储过程创建一个DbCommand
3.管理对象
当连接对象打开后,不需要再次连接
使用Using及早释放对象
4.参数处理
Database类提供了如下的方法,用于参数的处理:
AddParameter. 传递参数给存储过程
AddInParameter. 传递输入参数给存储过程
AddOutParameter. 传递输出参数给存储过程
GetParameterValue. 得到指定参数的值
SetParameterValue. 设定参数值
使用示例如下:
四.使用场景
DAAB2.0是对ADO.NET2.0的补充,它允许你使用相同的数据访问代码来支持不同的数据库,您通过改变配置文件就在不同的数据库之间切换。目前虽然只提供SQLServer和Oracle的支持,但是可以通过GenericDatabase和ADO.NET 2.0下的DbProviderFactory对象来增加对其他数据库的支持。如果想要编写出来的数据库访问程序具有更好的移植性,则DAAB2.0是一个不错的选择,但是如果您想要针对特定数据库的特性进行编程,就要用ADO.NET了。
参考:Enterprise Libaray –January 2006帮助文档及QuickStart

<%...@ Page Language="VB" AutoEventWireup="false" CodeFile="sql.aspx.vb" Inherits="sql" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>web3.cn——SQL、Access数据库自由切换</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="id" HeaderText="id" SortExpression="id" >
<HeaderStyle BackColor="Silver" />
</asp:BoundField>
<asp:BoundField DataField="provinceID" HeaderText="provinceID" SortExpression="provinceID" >
<HeaderStyle BackColor="Silver" />
</asp:BoundField>
<asp:BoundField DataField="province" HeaderText="provinceID" SortExpression="province" >
<HeaderStyle BackColor="Silver" />
</asp:BoundField>
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>
Imports System.Data
Imports Microsoft.Practices.EnterpriseLibrary.Data
Imports system.Data.Common
Imports System.Data.Odbc

Partial Class sql_accessClass sql_access
Inherits System.Web.UI.Page
Dim sys As New WebService
Protected Sub Page_Load()Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
BindGrid()
End If
End Sub

Sub BindGrid()Sub BindGrid()
Dim dv As DataView
dv = GetList_Access().DefaultView
GridView1.DataSource = dv
GridView1.DataBind()
End Sub
'列表
Public Function GetList_SQL()Function GetList_SQL() As DataTable
Dim db As Database = DatabaseFactory.CreateDatabase()
Dim sqlCommand As String = "select * FROM province ORDER BY id desc"
'要对数据源执行的 SQL 语句或存储过程。
Dim dbCommand As DbCommand = db.GetSqlStringCommand(sqlCommand)
Return db.ExecuteDataSet(dbCommand).Tables(0)
End Function
'列表
Public Function GetList_Access()Function GetList_Access() As DataTable
Dim db As Database = New GenericDatabase("Driver={Microsoft Access Driver (*.mdb)};Dbq=D:vs2005dbdb.mdb;Uid=sa;Pwd=sa;", OdbcFactory.Instance)
Dim sqlCommand As String = "select * FROM province ORDER BY id desc"
'要对数据源执行的 SQL 语句或存储过程。
Dim dbCommand As DbCommand = db.GetSqlStringCommand(sqlCommand)
Return db.ExecuteDataSet(dbCommand).Tables(0)
End Function以上代码不多,应该明白了吧,呵呵,只要把“dv = GetList_Access().DefaultView”换成“dv = GetList_SQL().DefaultView”即可换成了SQL的数据库了,简单吧。这里只给出一个思路,就看大家封装起来成更加简单易用的咯。
浙公网安备 33010602011771号