20080207 Data Access Application Block
http://www.yippeesoft.com
Data Access Application Block 将访问 Microsoft SQL Server? 数据库的性能和资源治理方面的最佳经验封装在一起。您可以很方便地在自己的 .NET 应用程序中将其作为构造块使用,从页减少了需要创建、测试和维护的自定义代码的数量。
尤其是,Data Access Application Block 可以帮助您:
调用存储过程或 SQL 文本命令。
指定参数具体信息。
返回 SqlDataReader、DataSet 或 XMLReader 对象。
例如,在引用了 Data Access Application Block 的应用程序中,您可以简单地在一行代码中调用存储过程并生成 DataSet
SqlHelper 类提供了五种 Shared (Visual Basic) 或 static (C#) 方法,它们是:ExecuteNonQuery、ExecuteDataset、ExecuteReader、ExecuteScalar 和 ExecuteXmlReader。实现的每种方法都提供一组一致的重载。这提供了一种很好的使用 SqlHelper 类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。
data access application block 是一个 .net 组件,包含优化的数据访问代码,可以帮助用户调用存储过程以及向 sql server 数据库发出 sql 文本命令。它返回 sqldatareader、dataset 和 xmlreader 对象。您可以在自己的 .net 应用程序中将其作为构造块来使用,以减少需要创建、测试和维护的自定义代码的数量。
http://www.microsoft.com/taiwan/msdn/library/2004/May-2004/wriportap2.htm
當 ADO 進入 MDAC (Microsoft Data Access Component 2.1 版) 的成熟期時,Microsoft 推出了「通用資料存取」活動。這個構想是要向開發人員展示單純利用一個簡單的物件模型 (Connection、Command 和 Recordset),他們就可以撰寫一個能與各種不同的資料來源相連接的應用程式,包括關聯性和非關聯性的形式。當時的說明文件 — 以及絕大多數的文章和範例 — 都忘了說明即使是使用相同的資料存取技術,不同的資料來源彼此的程式設計性和特性是大不相同。
最後的結果是如果應用程式需要數個來源的資料,最簡單的方法是使用所有資料來源所提供的功能「共同要素」,不過這就失去了使用可提供最佳化方法存取和操作不同 RDBMS 內的資訊的資料來源特定選項所帶來的效益。
常讓我對此方法質疑的是,經過我與客戶一番更詳細的分析之後,我們通常同意應用程式中與資料來源互動的部份,在與其餘的展示和商業邏輯比較起來,相當地小。藉由做好模組化設計,就有可能可以將 RDBMS 特定的程式碼隔離到一些可輕鬆互換的模組內,藉此避免「大小通吃」的方法存取我們的資料。我們可以改用相當特定的資料存取程式碼 (使用預存程序、指令批次和其他功能,視資料來源而定),而不需要碰到絕大部份其他應用程式程式碼。這有助於提醒正確的設計是撰寫可移植及有效程式碼的關鍵。
ADO.NET 將一些重要的變更帶入了資料存取的編碼競技場,就像專門化 .NET 資料提供者的概念一樣。使用特定的提供者,您就有最佳化的方法可到達資料來源,規避介入資料存取程式碼和資料庫伺服器之間一連串 OLE 和 ODBC 層「非常」豐富但有時候不必要的軟體介面和服務。然而,每個資料來源還是有不同的特性和功能、有不同的 SQL 對話,而且若要撰寫有效的應用程式,您還是必須使用這些特定的特性來取代「共同要素」。從可移植的觀點看來,Managed 和 Unmanaged 資料存取技術仍相當類似。
http://blog.163.com/han_xiao_f/blog/static/42077781200671994225665/
Enterprise Library: Data Access Application Block使用向导,Part 1
Data Access ApplicationBlock有如下好处:
l 减少编写重复累赘代码去执行标准的任务。
l 帮助在应用程序内部和跨企业应用维护一致的数据访问实践。
l 降低改变物理数据目标的难度。
l 减轻开发人员学习不同数据库类型的不同编程模型。
l 当移植应用程序到不同数据库类型时,减少重写代码的数量。
Data Access ApplicationBlock依赖项:
l Data AccessApplication Block依赖其他的applicationblocks和EnterpriseLibrary中的代码。
l ConfigurationApplication Block – Data Access ApplicationBlock使用该Configuration ApplicationBlock读取配置信息。
l Common类库功能,如instrumentation –提供不同功能用来显示事件和系统管理的数据。
l 此外,applicationblock使用XML文件存放配置信息,推荐采用EntepriseLibrary配置工具来修改这些配置信息。
选择合适的重载方法
每一个数据访问方法均有许多重载,如下的描述和指导帮助你选择合适的重载:
l 一些重载方法接受DBCommandWrapper对象,DBCommandWrapper在一个对象内同时封装了command和参数。允许你同时增加输入/输出参数和设置这些参数的类型。这些重载提供了很好的灵活性和对每一个方法的控制。
l 一些重载方法接受存储过程和存储过程参数集合,当调用仅有输入参数的存储过程时,调用这些重载比较方便。
l 一些重载方法接受System.Data.CommandType和字符串命令,当执行在线的SQL语句或没有参数的存储过程时,调用这些重载比较方便。
l 最后,上述的每一个重载都包含一个接受事务的重载方法,当在现有事务内执行方法时,允许你使用合适的重载类型
Data Access Application Block 翻译
Data Access Application Block 附带的文档 挑一些翻译出来 以后自己看 有不当的地方 高手请给与指教
一:引用Data Access Application Block
1.在解决方案中,单击项目添加对Microsoft.ApplicationBlocks.Data.dll的引用
2.添加
using System.Data.SqlClient;
using Microsoft.ApplicationBlocks.Data;
using System.Xml;
二 :用SqlDataReader 得到多个rows
1.用如下的重载方法调用带参数的存储过程
public static SqlDataReader ExecuteReader(string connectionString,CommandType commandType,string commandText,params SqlParameter[] commandParameters)
2.下面的代码片断向您展示了SqlHelper类如何获得一个SqlDataReader 对象。在获得这个对象之后,可以将它绑定到用户控件上
private SqlDataReader RetrieveDataReader(string connectionString, int categoryID)
&leftsign;
// 调用SqlHelper class 的静态方法ExecuteReader ,从而得到一个SqlDataReader
// 我们传递数据库连接字符串, 存储过程名字和参数categoryID 的值 SqlDataReader reader = SqlHelper.ExecuteReader(connectionString, "getProductsByCategory", categoryID);
return reader;
&rightsign;
http://www.cnblogs.com/rickie/archive/2005/02/06/102656.html
Data Access Application Block使用向导:
1.增加对Microsoft.Practices.EnterpriseLibrary.Data.dll和Microsoft.Practices.EnterpriseLibrary.Configuration.dll的引用,并在代码在添加:
using Microsoft.Practices.EnterpriseLibrary.Data;
2.调用代码示例:
(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))
&leftsign;
while (dataReader.Read())
&leftsign;
readerData.Append(dataReader["ContactName"]);
readerData.Append(Environment.NewLine);
&rightsign;
&rightsign;
txtResult.Text = readerData.ToString();
为了执行SQL语句,上述代码使用GetSqlStringCommandWrapper方法创建合适command wrapper对象,然后作为参数传递给ExecuteReader方法。
(3) ExecuteNonQuery方法
Database db = DatabaseFactory.CreateDatabase();
string sqlCommand = "getProductDetails";
DBCommandWrapper dbCommandWrapper = db.GetStoredProcCommandWrapper(sqlCommand);
// Add paramters
int productID=1;
// Input parameters can specify the input value
dbCommandWrapper.AddInParameter("@ProductID", DbType.Int32, productID);
// Output parameters specify the size of the return data
dbCommandWrapper.AddOutParameter("@ProductName", DbType.String, 40);
dbCommandWrapper.AddOutParameter("@UnitPrice", DbType.Currency, 8);
dbCommandWrapper.AddOutParameter("@QtyPerUnit", DbType.String, 20);
db.ExecuteNonQuery(dbCommandWrapper);
// Row of data is captured via output parameters
string results = string.Format(CultureInfo.CurrentCulture, "&leftsign;0&rightsign;, &leftsign;1&rightsign;, &leftsign;2:C&rightsign;, &leftsign;3&rightsign; ",
dbCommandWrapper.GetParameterValue("@ProductID"),
dbCommandWrapper.GetParameterValue("@ProductName"),
dbCommandWrapper.GetParameterValue("@UnitPrice"),
dbCommandWrapper.GetParameterValue("@QtyPerUnit"));
txtResult.Text = results;
为了执行存储过程,上述代码使用GetStoredProcCommandWrapper方法创建合适的command wrapper对象,然后作为参数传递给ExecuteNonQuery方法。
(4) ExecuteScalar方法
Database db = DatabaseFactory.CreateDatabase();
string sqlCommand = "GetProductName";
int productID=1;
DBCommandWrapper dbCommandWrapper = db.GetStoredProcCommandWrapper(sqlCommand, productID);
// Retrieve ProdcutName. ExecuteScalar returns an object, so
// we cast to the correct type (string).
string productName = (string) db.ExecuteScalar(dbCommandWrapper);
txtResult.Text = productName;
Demo程序界面如下(注意在项目属性窗口中设置Post-build Event Command Line属性值:copy "$(ProjectDir)*.config" "$(TargetDir)"):
***
作者:Rickie Lee (rickieleemail#yahoo.com)
本文参考Enterprise Library: Data Access Application Block Quick Start范例,简单编写一个DEMO。
References:
1. Enterprise Library: Data Access Application Block Quick Start
2. Rickie, Microsoft patterns & practices Enterprise Library January 2005 [中文稿], http://www.cnblogs.com/rickie/archive/2005/01/30/99443.html
3. Rickie, Enterprise Library released! http://www.cnblogs.com/rickie/archive/2005/01/29/99106.html
历史博文
- vc led udp - 2009
- c# zip 7zip - 2009
- 20070608 ASP.Net 用户 权限 - 2007
- 0527 2006 中国女排 MPX220 图片 176*200 - 2006
- CSDN 直通 用户体验 晕倒 - 2005