我的生产系统存在一个奇怪的问题。我有readCommitted事务定义了带有no_lock的读操作和带有表锁的写操作在同一范围内。
但是,多个进程能够覆盖锁定并能够执行写入操作,具有很大的影响。请帮忙!。感谢。
using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions() { IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted }))
{
dataAccess.ExecNonQuery("GetNextOrder", parametersList); //read orders from table 1, there is NO_lock in the SP
orderIDParameter = (IParameter)parametersList[0];
int orderIDParameterValue = (int) orderIDParameter.Value;
if (orderIDParameterValue != NullOrderID)
{
parametersList.Clear();
IParameter orderIDLockParameter = SQLClientFactory.GetParameter("@OrderID", orderIDParameterValue, Direction.In);
IParameter lockNameParameter = SQLClientFactory.GetParameter("@LockName", lockName, Direction.In);
parametersList.Add(orderIDLockParameter);
parametersList.Add(lockNameParameter);
dataAccess.ExecNonQuery("Insert_SP", parametersList); //Insert into table 2
orderID = orderIDParameterValue;
}
transaction.Complete();
}
存储过程:GetNextOrder
SELECT top 1 @OrderID=ht.OrderID
FROM dbo.table1 ht WITH(nolock)
left join dbo.table2 htl WITH(nolock) on ht.orderid = htl.orderid
WHERE ht.Status in (0,1)
存储过程:Insert_SP
CREATE procedure [dbo].[Insert_SP] (
@OrderID INT,
@LockName VARCHAR(50)
)
AS
BEGIN
SET NOCOUNT ON
insert into table2 (OrderID, LockName) VALUES (@OrderID, @LockName)
SET NOCOUNT OFF
END
答案 0 :(得分:0)
您的dataAccess类是如何定义的?
我怀疑它没有参与新交易 - 使用
connection.EnlistTransaction(Transaction.Current)
在那个班里。