C# 未提交事务隔离级别
我正在尝试使用C# 未提交事务隔离级别,c#,transactions,isolation-level,read-uncommitted,C#,Transactions,Isolation Level,Read Uncommitted,我正在尝试使用TransactionScope对象来理解事务在c#中是如何工作的。我在SQL server中了解它们,但我不知道如何在c中验证这一点。例如,我想检查是否将IsolationLevel设置为ReadUnCommitted,如何在代码中验证此行为 目前这是我的简单代码,我想测试的是,当我的第一个Update命令正在执行且未提交/回滚时,如何验证其他事务是否能够读取它影响的数据?有人能帮我举个代码示例吗 这是我的密码: public void TransferAmount(Accoun
TransactionScope
对象来理解事务在c#中是如何工作的。我在SQL server中了解它们,但我不知道如何在c
中验证这一点。例如,我想检查是否将IsolationLevel
设置为ReadUnCommitted
,如何在代码中验证此行为
目前这是我的简单代码,我想测试的是,当我的第一个Update
命令正在执行且未提交/回滚时,如何验证其他事务是否能够读取它影响的数据?有人能帮我举个代码示例吗
这是我的密码:
public void TransferAmount(Account a)
{
bool debit = false;
bool credit= true;
var option = new TransactionOptions();
option.IsolationLevel = System.Transactions.IsolationLevel.ReadUnCommitted;
try
{
using (TransactionScope transactionScope = new TransactionScope(TransactionScopeOption.Required, option))
{
using (IDbCommand cmd = Idbconnection.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "usp_Update_Debit";
IDataParameter param = cmd.CreateParameter();
param.ParameterName = "@mDebitAmount";
param.Value = a.Amount;
cmd.Parameters.Add(param);
Idbconnection.Open();
debit = cmd.ExecuteNonQuery() == 1;
}
using (IDbCommand cmd = Idbconnection.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "usp_Update_Credit";
IDataParameter param = cmd.CreateParameter();
param.ParameterName = "@mCreditAmount";
param.Value = a.Amount;
cmd.Parameters.Add(param);
credit = cmd.ExecuteNonQuery() == 1;
}
if (debit == credit)
transactionScope.Complete();
}
}
catch (Exception ex)
{
System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
throw new FaultException(new FaultReason(new FaultReasonText(ex.Message)));
}
}
您可以在启用调试的情况下运行应用程序的多个实例,并在需要的位置停止实例上的执行,然后继续运行其他实例。我会使用线程,但这可能更难开始。您可以在调试打开的情况下运行应用程序的多个实例,并在希望的时间点停止实例上的执行,然后继续运行其他实例。我会为此使用线程,但这可能更难开始。