C#执行SQL语句的困惑,各位给说说!
下面这段SQL是用来修改[StockCheck_Area]表中 [AreaApplied]字段的值,原意是先查询要修改值是这个值是不是 1,如果是就返回字符串‘HaveAppled’,如果不是就进行修改,然后返回‘true’。
在发现问题前,我看了很多便逻辑,没发现问题,但在C#中使用c#提供的事务执行时,每次返回的都是‘HaveAppled’,而奇怪的是返回‘HaveAppled’不应该执行的 UPDATE语句却执行了。多次断点查看传参也没有问题,直接将代码复制到SQL查询分析器执行也没有问题,都能返回预期的值,但通过C#事务执行就不行。
再后来,我在SQL语句前面加了 begion tran ,后面加了commit tran。然后在C#中执行时不使用事务,结果,靠,结果就可以了。
没明白是什么原因,有那位可以解释一下,至少下次能避免,就这么一个问题,我搞了一早上,时间成本太高了.
declare @applied bit
set @applied=(
Select AreaApplied
from StockCheck_Area with(updlock)
where StockCheckID=@StockCheckID
and GoodsAreaID=@GoodsAreaID)
if (@applied=0)
begin
UPDATE [StockCheck_Area]
SET [AreaApplied] = 1
WHERE [StockCheckID] = @StockCheckID
and [GoodsAreaID] = @GoodsAreaID
Select 'true'
end
else
begin
Select 'HaveAppled'
end
----上面在C#中以事务方式执行不能返回预期结果
begin tran
declare @applied bit
set @applied=(
Select AreaApplied
from StockCheck_Area with(updlock)
where StockCheckID=@StockCheckID
and GoodsAreaID=@GoodsAreaID)
if (@applied=0)
begin
UPDATE [StockCheck_Area]
SET [AreaApplied] = 1
WHERE [StockCheckID] = @StockCheckID
and [GoodsAreaID] = @GoodsAreaID
Select 'true'
end
else
begin
Select 'HaveAppled'
end
commit tran
--在C#中不使用事务,直接执行以上加了 tran的代码却能返回预期结果