.net企业库中数据库联接操作

数据访问应用程序块(Data Access Application Block)顾名思义是负责与数据打交道的应用程序块。DAAB并不是整个企业库的最低层,它依赖于企业库的最低层——配置管理程序块。现在简单使用企业库自带的配置工具(Enterprise Library Configuration)来完成DAAB的配置工作。

  说到这里想再说些题外话,我们知道企业库是由相对独立Application Block演变而成的,在以前的DAAB我们可能会构建工厂方法模式通过静态方法创建数据库链接。但现在既然企业库已经出炉了,我们也遵循通过配置管理来得到数据库连接这种方法。

 

概括来说,使用DAAB可以抽象为三个步骤,分别是:

 

1.      配置DAAB;

2.        实例化数据库;

3.      具体数据操作;

   第一部,创建配置信息。如前所述,企业库架构通过配置来创建数据库连接。我们可以使用企业库自带的配置工具(Enterprise Library Configuration)快捷、安全地完成配置工作。具体步骤如下:

     准备工作:这步很重要,我们新建了一个Web工程,这个工程得先增加一个项(应用程序配置文件)。这样做是为了直接使用配置工具打开配置文件进行编辑,省去不并要的麻烦。

  1.打开配置工具。(我的是XP系统,企业库版本为Enterprise Library - June 2005)开始菜单->所有程序->Microsoft patterns & practices->Enterprise Library - June 2005->Enterprise Library Configuration

  2.打开应用程序。File->Open Application 选择工程所在目录下的App.config或web.config文件。

 

  3.新建DAAB。右键点击刚建的Application->New->Data Access Application Block。

  

4.配置DAAB参数。这里内容太多,只说说其中几个常用的配置项。

 

4.1首先是数据库实例名称,在“Database Instances”节点下,默认为我们建立了名叫“Database Instance1”的实例名,这个名将用于在程序中创建数据库实例,请改成具有标识性的名字。

4.2其次是连接字符串,在“Connection Strings ”节点下,默认也会创造一个,同样,我们也可以改一下名。连接字符串中“Integrated Security”的值默认为True,代表用Windows集成认证(不需要用户名和密码属性),如果我们要用混合认证方式,就要先把值设为False,然后再在所在Connection String中增加用户名和密码两个属性并填充正确的属性值(方法:在具体Connection String节点上右键->New …)。一切就绪便可以确认保存了。

  第二部,便是创造数据库实例了。

  准备工作:需要把企业库引用到工程中。因为企业库是开源的,所以我们可以直接引用工程或者引用编译好的DLL。为了说明怎样使用,这里只引用两个关键程序集,分别是Microsoft.Practices.EnterpriseLibrary.Configuration.dl和Microsoft.Practices.EnterpriseLibrary.Data.dll。另外为了简化代码的编写,我们再在需要用到DAAB的地方using一下Microsoft.Practices.EnterpriseLibrary.Data这个命名空间。

  当我们需要执行数据库操作前,需要创建数据库实例。使用以下语句:

  Database db = DatabaseFactory.CreateDatabase("Northwind");

  就这一条语句便完成了数据库的连接操作!不过要注意,这里的Northwind是上一部配置工作中所述的数据库实例名称,而不是要连接的数据库名。数据库名是在数据库实例里的ConnectionStringNode属性所指向的ConnectionString中,和服务器名,用户名,及密码一起定义的。请把这个关系理清。

  另外,Database 的实例,在生命周期内维护着数据库的连接。即当从工厂生产一个数据库实例时,其内部即封闭了ADO.NET Connection的open方法;而当其生命周期结束后(假定在一对花括号内),它将自动调用close方法关闭连接。

 第三部,具体数据库操作。

我们以一具体实例来介绍一下数据库操作:

1.增加对Microsoft.Practices.EnterpriseLibrary.Data.dll和Microsoft.Practices.EnterpriseLibrary.Configuration.dll的引用,并在代码在添加:

using Microsoft.Practices.EnterpriseLibrary.Data;

2.编写存储过程,第二部完成之后在我们工程所要用到的数据库里建立存储过程;

CREATE PROCEDURE GetProductDetails

@ProductID int,    //默认为INPUT

@ProductName nvarchar(40) OUTPUT,

@UnitPrice money OUTPUT,

@QtyPerUnit nvarchar(20) OUTPUT

AS

SELECT @ProductName = ProductName,

            @UnitPrice = UnitPrice,

            @QtyPerUnit = QuantityPerUnit

FROM Products

WHERE ProductID = @ProductID. 

4.建立DBCommandWrapper来调用用存储过程GetProductDetails :

 

string sqlCommand = "GetProductsDetails";

DBCommandWrapper dbCommandWrapper = db.GetStoredProcCommandWrapper(sqlCommand);

dbCommandWrapper.AddInParameter("@ProductID", DbType.Int32, productID);

//把productID的value传递给@ProductID

dbCommandWrapper.AddOutParameter("@ProductName", DbType.String, 50);

//输出的参数 50代表参数的大小。

dbCommandWrapper.AddOutParameter("@UnitPrice", DbType.Currency, 8);

5.执行存储过程:

 

db.ExecuteNonQuery(dbCommandWrapper);

6.得到输出参数的值:

 

  string results = string.Format(

CultureInfo.CurrentCulture, "{0}, {1}, {2:C} ",

  dbCommandWrapper.GetParameterValue("@ProductID"),

  dbCommandWrapper.GetParameterValue("@ProductName"),

  dbCommandWrapper.GetParameterValue("@UnitPrice"));

txtResult.Text = results;

为了执行存储过程,上述代码使用GetStoredProcCommandWrapper方法创建合适的command wrapper对象,然后作为参数传递给ExecuteNonQuery方法。

   下面展示一下基类Database的6种方法的代码实现  :

1.       ExecuteDataSet

2.       LoadDataSet

3.       ExecuteReader

4.       ExecuteScalar

5.       ExecuteNonQuery

6.       UpdateDataSet

 

(1) ExecuteDataSet方法

Database db = DatabaseFactory.CreateDatabase();

DataSet dsCustomers = db.ExecuteDataSet(CommandType.Text, "Select * From Customers" );

customerGrid.DataSource = dsCustomers.Tables[0];

 

(2) ExecuteReader方法

Database db = DatabaseFactory.CreateDatabase();

 

string sqlCommand = "Select top 5 * From Customers";

DBCommandWrapper dbCommandWrapper = db.GetSqlStringCommandWrapper(sqlCommand);

 

StringBuilder readerData = new StringBuilder();

 

using (IDataReader dataReader = db.ExecuteReader(dbCommandWrapper))

{

while (dataReader.Read())

{

readerData.Append(dataReader["ContactName"]);

readerData.Append(Environment.NewLine);

}

}

 

txtResult.Text = readerData.ToString();

为了执行SQL语句,上述代码使用GetSqlStringCommandWrapper方法创建合适command wrapper对象,然后作为参数传递给ExecuteReader方法。

 

(3) ExecuteNonQuery方法前面已经介绍过了(略)

 

(4) ExecuteScalar方法

Database db = DatabaseFactory.CreateDatabase();

 

string sqlCommand = "GetProductName";

int productID=1;

DBCommandWrapper dbCommandWrapper db.GetStoredProcCommandWrapper(sqlCommand, productID);

//单值传参productID, dbCommandWrapper.AddInParameter("@ProductID", DbType.String, productID)也可实现 。

 

// Retrieve ProdcutName. ExecuteScalar returns an object, so

// we cast to the correct type (string).

string productName = (string) db.ExecuteScalar(dbCommandWrapper);

 

txtResult.Text = productName;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值