当前位置:编程学习 > C#/ASP.NET >>

Enterprise Library 3.0 DataAccess Block介绍(原创)

Enterprise Library 3.0 - April 2007

1. 概述:
Enterprise Library 3.0 (以后简称EL3)是为帮助企业用户完成基本的数据库操作、配置文件管理、日志管理、安全管理等用途由Microsoft的patterns & practices小组开发的一个开源的工具(框架?^_^)。

在Enterprise Library 3.0中包含如下8个应用程序块:

l Caching Application Block

l Cryptography Application Block

l Data Access Application Block

l Exception Handling Application Block

l Logging Application Block

l Policy Injection Application Block

l Security Application Block

l Validation Application Block

同时还提供了一个小型的Software Factory——Application Block Software Factory,可以创建自己的Application Block。由于这个是3.0版本了,大家也知道这是干嘛的,也不用多介绍了。

n 必需条件

1、 在安装EL3之前,您必需安装Windows Xp 、Windows Server 2003, 或 Windows Vista操作系统,推荐用正版(仅仅是推荐、推荐、推荐,都说了是推荐了!)。

2、 必需安装Microsoft .NET Framework 2.0 or 3.0.安装3.0是为了以下: 

a) The Application Block Software Factory 

b) The Validation Application Block Windows Communication Foundation (WCF) adapter 

c) The Exception Handling Application Block Windows Communication Foundation (WCF) exception shielding functionality 

3、 需要安装Microsoft Visual Studio 2005

n 说明

EL3的每个Block都包含源代码和测试工具,你需要用Microsoft Visual Studio 2005去运行测试工具,如果源代码和测试工具你已经修改过,则需要重新编译。如果你需要用Data Access Application Block你需要安装SQL Server2000(含2000)以上版本或者Oracle 9i或更高的版本数据库。

n EL3包含

1) Binaries

2) Source code(源代码)

3) Unit tests.

4) QuickStarts

5) Documentation

2. Data Access QuickStart:
在EL3安装目录下,找到EntLib3Src\Quick Starts\Data\CS下的DataAccessQuickStart.sln,(如果用VB打开则在VB目录下的项目),打开这个工程即可进入Data Access Block的快速开始工程。实际上每个Block都有一个quickstart,都是用来指导大家如何使用EL3的。这里我以SQL 2000 数据库来使用这个quickstart,你也可以使用Oracle 9i或更高版本。

2.1 准备工作
1、 安装好SQL 2000 Server服务端。(为Windows认证和密码认证混合型)

2、 EntLib3Src\Quick Starts\Data下的DataAccessQuickStarts.sql打开,会发现后面有一些字符是乱码。这是因为里面的编码是西欧字符。将其用Word打开,选择编码格式为西欧字符集, 保存后退出。这个文件里是一些SQL语句,创建运行的一些表和数据。

3、 EntLib3Src\Quick Starts\Data下的SetUpQuickStartsDB.bat,为运行创建数据库,点击批处理文件就可以运行。但是里面的指定机器名要改一下(如果不改会有问题,因为原名称带有“/”字符)。用记事本打开SetUpQuickStartsDB.bat,第51行,改成OSQL -S ShiLi -E -i DataAccessQuickStarts.sql,其中ShiLi是安装SQL时的实例名(根据你自己的名称修改好)。保存后退出,启动SQL服务,运行SetUpQuickStartsDB.bat。这时实例下出现EntLibQuickStarts数据库,里面有一些运行数据了。

4、 打开DataAccessQuickStart.sln,修改里面的App.config文件,将PublicKeyToken 弄成null,即PublicKeyToken = null ,因为要重新编译运行,如果不修改PublicKeyToken将会报错。然后是修改app.config中的数据库连接,可以直接在上面做修改,也可以使用开始->程序->中的Enterprise Library Configuration工具来进行修改,修改时可参考一下EL3自带的帮助文档,比较简单。我的配置文件为:

<configuration>

<configSections>

<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=3.0.0.0, Culture=neutral, PublicKeyToken=null" />

</configSections>

<dataConfiguration defaultDatabase="DataAccessQuickStart">

</dataConfiguration>

<connectionStrings>

<add name="DataAccessQuickStart" connectionString="server=zhangcheng;database=EntLibQuickStarts;Integrated Security=true"

providerName="System.Data.SqlClient" />

</connectionStrings>

</configuration>

5、 做好准备工作后,就可以运行QuickStartForm来研究DataAccess如何使用了。

2.2 说明
l 在使用EL3中的DataAccessBlock时,数据连接写在App.config中,实际上每次运行时读取的是\Quick Starts\Data\CS\DataAccessQuickStart\bin\Debug下的DataAccessQuickStart.exe.config,但是每次改动App.config文件后,编译后会自动修改bin下的配置文件。

l 当编写Web工程时,利用Microsoft.Practices.EnterpriseLibrary.Data.dll访问数据库,引用后修改Web工程的WebConfig即可访问数据库。在Web.config文件中加入 以下代码(以SQL数据库,实例名为localhost、数据库名为MySQLDB为例):注意还是要将PublicKeyToken设置为null

<configSections> <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=3.0.0.0, Culture=neutral, PublicKeyToken=null" /></configSections>

<dataConfiguration defaultDatabase="MYSQL">

</dataConfiguration>

<connectionStrings>

<add name="MYSQL" connectionString="server=.;database=MySQLDB;User ID=sa;Password=sa "

providerName="System.Data.SqlClient" />

</connectionStrings>

2.3 例子
我创建了一个MyData的项目,建立一个MyDataBase.cs的类,用于利用Microsoft.Practices.EnterpriseLibrary.Data.dll搭建自己的填充DataTable方法,在建立一个名为StaffDef.cs类,用来做数据库具体操作的方法。

MyDataBase:

using System;

using System.Collections.Generic;

using System.Text;

using System.Data;

using System.IO;

using System.Xml;

using System.Data.Common;

using Microsoft.Practices.EnterpriseLibrary.Data;

using System.Globalization;

namespace MyData

{

public static class MyDataBase

{

//填充

public static DataSet FillDataSet(DbCommand command, DataSet ds, string strTableName, Database _Database)

{

if (String.IsNullOrEmpty(strTableName))

strTableName = "Table";

if (ds == null)

throw new ArgumentNullException();

ds.Locale = CultureInfo.InvariantCulture;

_Database.LoadDataSet(command, ds, strTableName);

return ds;

}

}

}

StaffDef.:

using System;

using System.Collections.Generic;

using System.Text;

using Microsoft.Practices.EnterpriseLibrary.Data;

using MyModule;

using System.Data;

using System.Data.Common;

using System.Data.SqlClient;

using System.Security.Cryptography;

using BusinessRule;

namespace MyData

{

public class StaffDef

{

Staff _Staff = null;

Database _Database; //声明Microsoft.Practices.EnterpriseLibrary.DataBase类

public StaffDef()

{

_Staff = new Staff(); //数据模型

_Database = DatabaseFactory.CreateDatabase();

}

/// <summary>

/// 根据条件获取记录

/// </summary>

/// <param name="strQerry">带where的条件语句,为空时查所有</param>

/// <returns></returns>

public Staff.StaffDefDataTable ListStaff(string strQerry)

{

string strSQL = "select * from " + _Staff.StaffDef.TableName + strQerry;

DbCommand _dbCommand = _Database.GetSqlStringCommand(strSQL);

MyDataBase.FillDataSet(_dbCommand, _Staff, _Staff.StaffDef.TableName, _Database);

if (_Staff == null || _Staff.StaffDef.Rows.Count < 1)

return null;

return _Staff.StaffDef;

}


/// <summary>

/// 根据用户名获取密码

/// </summary>

/// <param name="strQerry"></param>

/// <returns></returns>

public string GetPassWordByUser(string strUser)

{

string strSQL = "select PassWord from " + _Staff.StaffDef.TableName + " where StaffName = '"+strUser+"'" ;

DbCommand _dbCommand = _Database.GetSqlStringCommand(strSQL);

IDataReader iRead = _Database.ExecuteReader(_dbCommand);

string strReturn = null;

if(iRead.Read())

{

strReturn = iRead[0].ToString();

iRead.Close();

}

return strReturn;

}

}}
--------------------编程问答-------------------- http://wiki.entlib.net.cn 看看 3.1 的吧。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,