簡化實現(xiàn)通用數(shù)據(jù)訪問功能的開發(fā)任務(wù)。應(yīng)用程序可以在很多情況下使用應(yīng)用程序塊,例如讀取顯示數(shù)據(jù)、獲得通過應(yīng)用程序?qū)拥臄?shù)據(jù),以及將更改過的數(shù)據(jù)提交回數(shù)據(jù)庫系統(tǒng)等。應(yīng)用程序塊包括對存儲過程和內(nèi)嵌 SQL 以及常見內(nèi)務(wù)處理任務(wù)(例如,管理連接、創(chuàng)建與緩存封裝在應(yīng)用程序塊的方法中的參數(shù))的支持。換句話說,數(shù)據(jù)訪問應(yīng)用程序塊提供對最常用的 ADO.NET 功能的訪問。
1. 解決的問題:
(1) 它可以減少編寫樣本代碼以執(zhí)行標(biāo)準(zhǔn)任務(wù)的需要。
(2) 它有助于在應(yīng)用程序和整個企業(yè)中維護(hù)一致的數(shù)據(jù)訪問做法。
(3) 它可以降低更改物理數(shù)據(jù)庫目標(biāo)的難度。
(4) 它使開發(fā)人員免于學(xué)習(xí)不同類型數(shù)據(jù)庫的不同編程模型。
(5) 將應(yīng)用程序移植到不同類型的數(shù)據(jù)庫時,它可以減少需要重新編寫的代碼數(shù)量。
2. 使用:
(1) 使用Enterprise Library Configuration打開應(yīng)用程序配置文件。
(2) 添加引用:Microsoft.Practices.EnterpriseLibrary.Data.dll
using Microsoft.Practices.EnterpriseLibrary.Data;
(3) 創(chuàng)建數(shù)據(jù)庫連接操作類:
Database db = DatabaseFactory.CreateDatabase("NorthWind");(4) 執(zhí)行SQL語句:
DataSet ds = db.ExecuteDataSet(CommandType.Text,commandText);
DataReader dr = db.ExecuteReader(CommandType.Text,commandText); 用完后記得要dr.Close();
object result = db.ExecuteScalar(CommandType.Text,commandText);
//或者
DbCommand dbCommand = db.GetSqlStringCommand(commandText);
object result = db.Execute*(dbCommand);(5) 執(zhí)行存儲過程:
DbCommand dbCommand = db.GetStoredProcCommand(storeProcName);
db.AddInParameter(dbCommand, "inParam", DbType.Int32, Category);//注意這里和下面不用加@,DAAB會自動加。
db.AddOutParameter(dbCommand, "outParam", DbType.Int32, Category);
object result = db.Execute*(dbCommand);
object outValue = db.GetParameterValue(dbCommand, "outParam");(6) 更新DataSet:
DbCommand insertCommand = db.GetStoredProcCommand("AddCommand");//可以再添加處理參數(shù),下同
DbCommand deleteCommand = db.GetStoredProcCommand("DeleteCommand");
DbCommand updateCommand = db.GetStoredProcCommand("UpdateCommand");
int rowsAffected = db.UpdateDataSet(dataSet, "tableName", insertCommand, updateCommand,
deleteCommand, UpdateBehavior.Standard);(7) 處理事務(wù):
public bool Transfer(int transactionAmount, int sourceAccount, int destinationAccount)
{
bool result = false;
Database db = DatabaseFactory.CreateDatabase();
string sqlCommand = "Command1";
DbCommand creditCommand = db.GetStoredProcCommand(sqlCommand);
sqlCommand = "Comand2";
DbCommand debitCommand = db.GetStoredProcCommand(sqlCommand);
using (DbConnection connection = db.CreateConnection())
{
connection.Open();
DbTransaction transaction = connection.BeginTransaction();
try
{
db.ExecuteNonQuery(creditCommand, transaction);
db.ExecuteNonQuery(debitCommand, transaction);
transaction.Commit();
result = true;
}
catch
{
transaction.Rollback();
}
connection.Close();
return result;
}
}

3. Data Access Application Block 的設(shè)計:
4. 暫時還沒有搞明白的地方:
DbCommand dbCommand = db.GetStoredProcCommand(commandTest/storeProcName, productID);
object value = db.ExecuteScalar(dbCommand); Passing the productID value to the commandTest/storeProcName results in parameter discovery being used to correctly establish the parameter information for the productID. Subsequent calls to this method will cause the block to retrieve the parameter information from the cache, and not require rediscovery。
http://davidhayden.com/blog/dave/archive/2006/11/03/CachingStoredProcedureParameters.aspx
http://davidhayden.com/blog/dave/archive/2006/11/01/SqlCommandBuilderDeriveParameters.aspx
貌似是在說對參數(shù)進(jìn)行緩存什么的,但不知道究竟有啥用?真的能提高性能?-_-


浙公網(wǎng)安備 33010602011771號