TransactionScope和Enterprise Libray 3.0 Data Access Applicat
Enterprise Libray 3.0已经发布了,具体可参见TerryLee的 Enterprise Library 3.0 发布.下载了看看,有非常激动人心的更新.我只是看看Data Access Application Block代码,代码中有这个类TransactionScopeConnections,是个内部类,设计意图很明显就是使用数据库
Enterprise Libray 3.0已经发布了,具体可参见TerryLee的 Enterprise Library 3.0 发布.下载了看看,有非常激动人心的更新.我只是看看Data Access Application Block代码,代码中有这个类TransactionScopeConnections,是个内部类,设计意图很明显就是使用数据库的事务模型.我觉得设计为内部类有点瑕疵,我的习惯是事务和提交在业务逻辑层. .NET 2.0的System.Transactions应该是一个更好的选择。就将Data Access Application Block的QuickStart例子代码:
///
/// Transfers an amount between two accounts.
///
/// Amount to transfer.
/// Account to be credited.
/// Account to be debited.
///
///
/// context of a transaction.
public bool Transfer(int transactionAmount, int sourceAccount, int destinationAccount)
{
bool result = false;
// Create the Database object, using the default database service. The
// default database service is determined through configuration.
Database db = DatabaseFactory.CreateDatabase();
// Two operations, one to credit an account, and one to debit another
// account.
string sqlCommand = "CreditAccount"
DbCommand creditCommand = db.GetStoredProcCommand(sqlCommand);
db.AddInParameter(creditCommand, "AccountID", DbType.Int32, sourceAccount);
db.AddInParameter(creditCommand, "Amount", DbType.Int32, transactionAmount);
sqlCommand = "DebitAccount"
DbCommand debitCommand = db.GetStoredProcCommand(sqlCommand);
db.AddInParameter(debitCommand, "AccountID", DbType.Int32, destinationAccount);
db.AddInParameter(debitCommand, "Amount", DbType.Int32, transactionAmount);
using (DbConnection connection = db.CreateConnection())
{
connection.Open();
DbTransaction transaction = connection.BeginTransaction();
try
{
// Credit the first account
db.ExecuteNonQuery(creditCommand, transaction);
// Debit the second account
db.ExecuteNonQuery(debitCommand, transaction);
// Commit the transaction
transaction.Commit();
result = true;
}
catch
{
// Rollback transaction
transaction.Rollback();
}
connection.Close();
return result;
}
}
按照TransactionScope类进行改造,试验成功了,代码如下:
public bool Transfer(int transactionAmount, int sourceAccount, int destinationAccount)
{
bool result = false;
Database database = DatabaseFactory.CreateDatabase();
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
TestCommand1(database, transactionAmount, sourceAccount);
TestCommand2(database, transactionAmount, destinationAccount);
scope.Complete();
result = true;
}
return result;
}
private void TestCommand1(Database db, int transactionAmount, int sourceAccount)
{
string sqlCommand = "CreditAccount"
DbCommand creditCommand = db.GetStoredProcCommand(sqlCommand);
db.AddInParameter(creditCommand, "AccountID", DbType.Int32, sourceAccount);
db.AddInParameter(creditCommand, "Amount", DbType.Int32, transactionAmount);
// Credit the first account
db.ExecuteNonQuery(creditCommand);
}
private void TestCommand2(Database db, int transactionAmount, int destinationAccount)
{
string sqlCommand = "DebitAccount"
DbCommand debitCommand = db.GetStoredProcCommand(sqlCommand);
db.AddInParameter(debitCommand, "AccountID", DbType.Int32, destinationAccount);
db.AddInParameter(debitCommand, "Amount", DbType.Int32, transactionAmount);
// Debit the second account
db.ExecuteNonQuery(debitCommand);
}
DAAB 在一个事务中可以在一个数据库连接中检测到几个命令的执行,这样可以避免虽然一个数据库连接执行的几个命令而启用 分布式事务 。在企业类库2.0的DAAB常常启用了分布式事务,就凭这一点,使用企业类库2.0的同学们有必要升级到企业类库3.0。
Parameter Discovery on Ms Access and SqlServer. using Microsoft Patterns and Practices DataBlock version 3.0 final
http://www.codeproject.com/useritems/Parameter_DiscoveryV292.asp

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











li is an element in the HTML markup language and is used to create lists. li represents a list item, which is a child element of ul or ol. The role of the li tag is to define each item in the list. In HTML, the li element is usually used with the ul or ol element to create an ordered or unordered list. Unordered lists use the ul element, and list items are represented by the li element, while ordered lists use the ol element, also using li Element representation.

enterprise is the enterprise version of the Windows system. The Windows enterprise version is mainly aimed at large and medium-sized enterprises. It has added a variety of practical functions such as Direct Access, Windows To Go Creator, AppLokcer, BranchCache, etc.

In HTML, the full English name of li is "list item", which means "list item". It is an element tag that defines a list item. The syntax is "<li>list item content</li>"; "<li>" tag Available in ordered list "<ol>" and unordered list "<ul>".

How to remove the li default style in css: 1. Create an HTML sample file; 2. Add the li tag content; 3. Set the "list-style-type" attribute to "none" in css to remove the li default style.

How to use transactionscope: 1. Introduce a namespace; 2. Create a TransactionScope object; 3. Start a transaction; 4. Perform database operations; 5. Submit or rollback the transaction. Detailed introduction: 1. Introduce the namespace. Before using TransactionScope, you need to introduce the System.Transactions namespace; 2. Create a TransactionScope object, when using TransactionScope, etc.

Steps to use transactionscope: 1. Introduce a namespace; 2. Create a TransactionScope object; 3. Start a transaction; 4. Perform database operations; 5. Submit or rollback the transaction. Detailed introduction: 1. Introduce the namespace. Before using TransactionScope, you need to introduce the System.Transactions namespace; 2. Create the TransactionScope object in the code block that needs to use transactions, etc.

According to news from this site on November 16, at today’s Microsoft Ignite 2023 Developer Conference, Microsoft announced that BingChat and its enterprise premium version BingChat for Enterprise were officially renamed Copilot! Microsoft Communications Director Caitlin Roulston said that the company decided to rename "BingChat Enterprise" to "Copilot". This change reflects Microsoft's vision of creating a unified Copilot experience for consumers and business customers. Of course, it's not just the name that has changed. Starting December 1st, using an Enterprise account (Microsoft

How to implement different colors for css li: 1. Modify the li color through the "ul li::marker {color: #3860f4;}" attribute; 2. Through "li:before {content: "";width: 6px;height : 6px;display: inline-block;border-radius: 50%;background: #4F8EFF..." attribute sets the color.
