0

0

Enterprise Library2.0(1):Data Access Application Block学

php中文网

php中文网

发布时间:2016-06-07 15:42:46

|

1237人浏览过

|

来源于php中文网

原创

Data Access Application Block 提供了通用的数据访问的功能,随着 2.0 版本的推出有了很大变化。 一.改进 在 DAAB1.1 里面我们知道 Database 方法返回或者创建一个 DBCommandWrapper 对象,而在 DAAB2.0 里面移除了 DBCommandWrapper 类,用 ADO.NET2.0 里

Enterprise Library2.0(1):Data Access Application Block学

Data Access Application Block提供了通用的数据访问的功能,随着2.0版本的推出有了很大变化。

一.改进

DAAB1.1里面我们知道Database方法返回或者创建一个DBCommandWrapper对象,而在DAAB2.0里面移除了DBCommandWrapper类,用ADO.NET2.0里面的DBCommand类代替实现类似的功能,这样使得DAAB跟我们的.NET类库的结合更加紧密,回忆一下我们在1.1里面用DBCommandWrapper来访问数据时的代码:

Enterprise Library2.0(1):Data Access Application Block学Database db = DatabaseFactory.CreateDatabase();
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学DBCommandWrapper dbCommand 
= db.GetStoredProcCommandWrapper("GetProductsByCategory");
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学dbCommand.AddInParameter(
"CategoryID", DbType.Int32, Category);
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学DataSet productDataSet 
= db.ExecuteDataSet(dbCommand);

而用了新的DBCommand类之后则变成了:

Enterprise Library2.0(1):Data Access Application Block学Database db = DatabaseFactory.CreateDatabase();
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学DbCommand dbCommand 
= db.GetStoredProcCommand("GetProductsByCategory"); 
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学db.AddInParameter(dbCommand, 
"CategoryID", DbType.Int32, Category);
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学DataSet productDataSet 
= db.ExecuteDataSet(dbCommand);

数据库连接字符串在我们基于数据库的开发永远是少不了的,但是在DAAB1.1下,它所使用的字符串跟我们在.NET类库中使用的连接字符串却是不能共享的,它们分别保存在不同的位置。而在2.0Data Access Application Block使用了ADO.NET2.0里面配置区,这样带来的一个好处是连接字符串可以在Application Block和自定义的.NET类之间共享使用该配置区,如:

Enterprise Library2.0(1):Data Access Application Block学connectionStrings>
Enterprise Library2.0(1):Data Access Application Block学        
add
Enterprise Library2.0(1):Data Access Application Block学            
name="DataAccessQuickStart" 
Enterprise Library2.0(1):Data Access Application Block学            providerName
="System.Data.SqlClient"
Enterprise Library2.0(1):Data Access Application Block学            connectionString
="server=(local)\SQLEXPRESS;database=EntLibQuickStarts;Integrated Security=true" />
Enterprise Library2.0(1):Data Access Application Block学
connectionStrings>

.NET2.0下,泛型编程已经成为了一个核心,而2.0版的DAAB中也新增了一个GenericDatabase对象。DAAB中虽然已经包含了SqlDatabaseOrcaleDatabase,但是如果我们需要使用其他的像DB2等数据库时,就需要用到GenericDatabase,它可以用于任何.NET类库中的数据提供者,包括OdbcProviderOleDbProvider

二.使用示例

DAAB2.0的配置非常简单,主要有以下几方面的配置:

配置连接字符串

Enterprise Library2.0(1):Data Access Application Block学

配置默认数据库

Enterprise Library2.0(1):Data Access Application Block学

添加相关的命名空间:

Enterprise Library2.0(1):Data Access Application Block学using Microsoft.Practices.EnterpriseLibrary.Data;
Enterprise Library2.0(1):Data Access Application Block学
using System.Data;

使用Data Access Application Block进行数据的读取和操作,一般分为三步:

1.创建Database对象

2.提供命令参数,如果需要的话

3.执行命令

下面分别看一下DataAccessQuickStart中提供的一些例子:

执行静态的SQL语句

Enterprise Library2.0(1):Data Access Application Block学public string GetCustomerList()
Enterprise Library2.0(1):Data Access Application Block学Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学{
Enterprise Library2.0(1):Data Access Application Block学
// 创建Database对象
Enterprise Library2.0(1):Data Access Application Block学
Database db = DatabaseFactory.CreateDatabase();
Enterprise Library2.0(1):Data Access Application Block学
// 使用SQL语句创建DbCommand对象
Enterprise Library2.0(1):Data Access Application Block学
string sqlCommand = "Select CustomerID, Name, Address, City, Country, PostalCode " +
Enterprise Library2.0(1):Data Access Application Block学    
"From Customers";
Enterprise Library2.0(1):Data Access Application Block学DbCommand dbCommand 
= db.GetSqlStringCommand(sqlCommand);
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学StringBuilder readerData 
= new StringBuilder();
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学
// 调用ExecuteReader方法
Enterprise Library2.0(1):Data Access Application Block学
using (IDataReader dataReader = db.ExecuteReader(dbCommand))
Enterprise Library2.0(1):Data Access Application Block学Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学{
Enterprise Library2.0(1):Data Access Application Block学    
while (dataReader.Read())
Enterprise Library2.0(1):Data Access Application Block学Enterprise Library2.0(1):Data Access Application Block学    
Enterprise Library2.0(1):Data Access Application Block学{
Enterprise Library2.0(1):Data Access Application Block学        
// Get the value of the 'Name' column in the DataReader
Enterprise Library2.0(1):Data Access Application Block学
        readerData.Append(dataReader["Name"]);
Enterprise Library2.0(1):Data Access Application Block学        readerData.Append(Environment.NewLine);
Enterprise Library2.0(1):Data Access Application Block学    }

Enterprise Library2.0(1):Data Access Application Block学}

Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学
return readerData.ToString();
Enterprise Library2.0(1):Data Access Application Block学}

执行存储过程并传递参数,返回DataSet

Enterprise Library2.0(1):Data Access Application Block学public DataSet GetProductsInCategory(int Category)
Enterprise Library2.0(1):Data Access Application Block学Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学{
Enterprise Library2.0(1):Data Access Application Block学    
// Create the Database object, using the default database service. The
Enterprise Library2.0(1):Data Access Application Block学    
// default database service is determined through configuration.
Enterprise Library2.0(1):Data Access Application Block学
    Database db = DatabaseFactory.CreateDatabase();
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    
string sqlCommand = "GetProductsByCategory";
Enterprise Library2.0(1):Data Access Application Block学    DbCommand dbCommand 
= db.GetStoredProcCommand(sqlCommand);
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    
// Retrieve products from the specified category.
Enterprise Library2.0(1):Data Access Application Block学
    db.AddInParameter(dbCommand, "CategoryID", DbType.Int32, Category);
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    
// DataSet that will hold the returned results        
Enterprise Library2.0(1):Data Access Application Block学
    DataSet productsDataSet = null;
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    productsDataSet 
= db.ExecuteDataSet(dbCommand);
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    
// Note: connection was closed by ExecuteDataSet method call 
Enterprise Library2.0(1):Data Access Application Block学

Enterprise Library2.0(1):Data Access Application Block学    
return productsDataSet;
Enterprise Library2.0(1):Data Access Application Block学}

利用DataSet更新数据

Enterprise Library2.0(1):Data Access Application Block学public int UpdateProducts()
Enterprise Library2.0(1):Data Access Application Block学Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学{
Enterprise Library2.0(1):Data Access Application Block学    
// Create the Database object, using the default database service. The
Enterprise Library2.0(1):Data Access Application Block学    
// default database service is determined through configuration.
Enterprise Library2.0(1):Data Access Application Block学
    Database db = DatabaseFactory.CreateDatabase();
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    DataSet productsDataSet 
= new DataSet();
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    
string sqlCommand = "Select ProductID, ProductName, CategoryID, UnitPrice, LastUpdate " +
Enterprise Library2.0(1):Data Access Application Block学        
"From Products";
Enterprise Library2.0(1):Data Access Application Block学    DbCommand dbCommand 
= db.GetSqlStringCommand(sqlCommand);
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    
string productsTable = "Products";
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    
// Retrieve the initial data
Enterprise Library2.0(1):Data Access Application Block学
    db.LoadDataSet(dbCommand, productsDataSet, productsTable);
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    
// Get the table that will be modified
Enterprise Library2.0(1):Data Access Application Block学
    DataTable table = productsDataSet.Tables[productsTable];
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    
// Add a new product to existing DataSet
Enterprise Library2.0(1):Data Access Application Block学Enterprise Library2.0(1):Data Access Application Block学
    DataRow addedRow = table.Rows.Add(new object[] Enterprise Library2.0(1):Data Access Application Block学{DBNull.Value, "New product"1125});
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    
// Modify an existing product
Enterprise Library2.0(1):Data Access Application Block学
    table.Rows[0]["ProductName"= "Modified product";
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    
// Establish our Insert, Delete, and Update commands
Enterprise Library2.0(1):Data Access Application Block学
    DbCommand insertCommand = db.GetStoredProcCommand("AddProduct");
Enterprise Library2.0(1):Data Access Application Block学    db.AddInParameter(insertCommand, 
"ProductName", DbType.String, "ProductName", DataRowVersion.Current);
Enterprise Library2.0(1):Data Access Application Block学    db.AddInParameter(insertCommand, 
"CategoryID", DbType.Int32, "CategoryID", DataRowVersion.Current);
Enterprise Library2.0(1):Data Access Application Block学    db.AddInParameter(insertCommand, 
"UnitPrice", DbType.Currency, "UnitPrice", DataRowVersion.Current);
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    DbCommand deleteCommand 
= db.GetStoredProcCommand("DeleteProduct");
Enterprise Library2.0(1):Data Access Application Block学    db.AddInParameter(deleteCommand, 
"ProductID", DbType.Int32, "ProductID", DataRowVersion.Current);
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    DbCommand updateCommand 
= db.GetStoredProcCommand("UpdateProduct");
Enterprise Library2.0(1):Data Access Application Block学    db.AddInParameter(updateCommand, 
"ProductID", DbType.Int32, "ProductID", DataRowVersion.Current);
Enterprise Library2.0(1):Data Access Application Block学    db.AddInParameter(updateCommand, 
"ProductName", DbType.String, "ProductName", DataRowVersion.Current);
Enterprise Library2.0(1):Data Access Application Block学    db.AddInParameter(updateCommand, 
"LastUpdate", DbType.DateTime, "LastUpdate", DataRowVersion.Current);
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    
// Submit the DataSet, capturing the number of rows that were affected
Enterprise Library2.0(1):Data Access Application Block学
    int rowsAffected = db.UpdateDataSet(productsDataSet, "Products", insertCommand, updateCommand,
Enterprise Library2.0(1):Data Access Application Block学                                        deleteCommand, UpdateBehavior.Standard);
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    
return rowsAffected;
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学}

通过ID获取记录详细信息

Enterprise Library2.0(1):Data Access Application Block学public string GetProductDetails(int productID)
Enterprise Library2.0(1):Data Access Application Block学Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学{
Enterprise Library2.0(1):Data Access Application Block学    
// Create the Database object, using the default database service. The
Enterprise Library2.0(1):Data Access Application Block学    
// default database service is determined through configuration.
Enterprise Library2.0(1):Data Access Application Block学
    Database db = DatabaseFactory.CreateDatabase();
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    
string sqlCommand = "GetProductDetails";
Enterprise Library2.0(1):Data Access Application Block学    DbCommand dbCommand 
= db.GetStoredProcCommand(sqlCommand);
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    
// Add paramters
Enterprise Library2.0(1):Data Access Application Block学    
// Input parameters can specify the input value
Enterprise Library2.0(1):Data Access Application Block学
    db.AddInParameter(dbCommand, "ProductID", DbType.Int32, productID);
Enterprise Library2.0(1):Data Access Application Block学    
// Output parameters specify the size of the return data
Enterprise Library2.0(1):Data Access Application Block学
    db.AddOutParameter(dbCommand, "ProductName", DbType.String, 50);
Enterprise Library2.0(1):Data Access Application Block学    db.AddOutParameter(dbCommand, 
"UnitPrice", DbType.Currency, 8);
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    db.ExecuteNonQuery(dbCommand);
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    
// Row of data is captured via output parameters
Enterprise Library2.0(1):Data Access Application Block学
    string results = string.Format(CultureInfo.CurrentCulture, "{0}, {1}, {2:C} ",
Enterprise Library2.0(1):Data Access Application Block学                                   db.GetParameterValue(dbCommand, 
"ProductID"),
Enterprise Library2.0(1):Data Access Application Block学                                   db.GetParameterValue(dbCommand, 
"ProductName"),
Enterprise Library2.0(1):Data Access Application Block学                                   db.GetParameterValue(dbCommand, 
"UnitPrice"));
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    
return results;
Enterprise Library2.0(1):Data Access Application Block学}

XML格式返回数据

Enterprise Library2.0(1):Data Access Application Block学public string GetProductList()
Enterprise Library2.0(1):Data Access Application Block学Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学{
Enterprise Library2.0(1):Data Access Application Block学    
// Use a named database instance that refers to a SQL Server database.
Enterprise Library2.0(1):Data Access Application Block学
    SqlDatabase dbSQL = DatabaseFactory.CreateDatabase() as SqlDatabase;
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    
// Use "FOR XML AUTO" to have SQL return XML data
Enterprise Library2.0(1):Data Access Application Block学
    string sqlCommand = "Select ProductID, ProductName, CategoryID, UnitPrice, LastUpdate " +
Enterprise Library2.0(1):Data Access Application Block学        
"From Products FOR XML AUTO";
Enterprise Library2.0(1):Data Access Application Block学    DbCommand dbCommand 
= dbSQL.GetSqlStringCommand(sqlCommand);
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    XmlReader productsReader 
= null;
Enterprise Library2.0(1):Data Access Application Block学    StringBuilder productList 
= new StringBuilder();
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学    
try
Enterprise Library2.0(1):Data Access Application Block学Enterprise Library2.0(1):Data Access Application Block学    
Enterprise Library2.0(1):Data Access Application Block学{
Enterprise Library2.0(1):Data Access Application Block学        productsReader 
= dbSQL.ExecuteXmlReader(dbCommand);
Enterprise Library2.0(1):Data Access Application Block学
Enterprise Library2.0(1):Data Access Application Block学        
// Iterate through the XmlReader and put the data into our results.
Enterprise Library2.0(1):Data Access Application Block学
        while (!productsReader.EOF)
Enterprise Library2.0(1):Data Access Application Block学Enterprise Library2.0(1):Data Access Application Block学        
Enterprise Library2.0(1):Data Access Application Block学{
Enterprise Library2.0(1):Data Access Application Block学            
if (productsReader.IsStartElement())
Enterprise Library2.0(1):Data Access Application Block学Enterprise Library2.0(1):Data Access Application Block学            
Enterprise Library2.0(1):Data Access Application Block学{
Enterprise Library2.0(1):Data Access Application Block学                productList.Append(productsReader.ReadOuterXml());
Enterprise Library2.0(1):Data Access Application Block学                productList.Append(Environment.NewLine);
Enterprise Library2.0(1):Data Access Application Block学            }

Enterprise Library2.0(1):Data Access Application Block学        }

Enterprise Library2.0(1):Data Access Application Block学    }

Enterprise Library2.0(1):Data Access Application Block学    
finally
Enterprise Library2.0(1):Data Access Application Block学Enterprise Library2.0(1):Data Access Application Block学    
Enterprise Library2.0(1):Data Access Application Block学{
Enterprise Library2.0(1):Data Access Application Block学      
// Close the Reader.
Enterprise Library2.0(1):Data Access Application Block学
      if (productsReader != null)
Enterprise Library2.0(1):Data Access Application Block学Enterprise Library2.0(1):Data Access Application Block学      
Enterprise Library2.0(1):Data Access Application Block学{
Enterprise Library2.0(1):Data Access Application Block学          productsReader.Close();
Enterprise Library2.0(1):Data Access Application Block学      }

Enterprise Library2.0(1):Data Access Application Block学      
Enterprise Library2.0(1):Data Access Application Block学      
// Explicitly close the connection. The connection is not closed
Enterprise Library2.0(1):Data Access Application Block学      
// when the XmlReader is closed.
Enterprise Library2.0(1):Data Access Application Block学
      if (dbCommand.Connection != null)
Enterprise Library2.0(1):Data Access Application Block学Enterprise Library2.0(1):Data Access Application Block学      
Enterprise Library2.0(1):Data Access Application Block学{
Enterprise Library2.0(1):Data Access Application Block学        dbCommand.Connection.Close();
Enterprise Library2.0(1):Data Access Application Block学

相关文章

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

37

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

37

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

45

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Pandas 教程
Pandas 教程

共15课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号