【发布时间】:2014-07-16 12:14:49
【问题描述】:
我在代码的不同点面临以下问题。 调用存储过程后,从 DB (SQL Server) 返回 SqlException,并显示消息“在批处理结束时检测到不可提交的事务。事务已回滚”。存储过程结构如下:
USE [EXAMPLE_DB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_ExampleStoredProcedure]
@Parameter INT, @AnotherParameter INT
AS
BEGIN
BEGIN TRY
SET NOCOUNT ON;
DECLARE @Variable INT;
DECLARE @AnotherVariable CHAR;
DECLARE @ErrMsg VARCHAR;
SET @ErrMsg = '';
/*Doing Some Stuff Here (Select, IF-THEN, etc...)
/* I call another stored procedure */
EXECUTE [dbo].[sp_SecondStoredProcedure]
@Param = 'Blabla'
,@Param2 = 'BlaBlaBla'
/*Here I handle some custom output parameters from second stored
procedure to handle errors */
/* Other stuff here */
END TRY
BEGIN CATCH
SET @CustomExitCode = 'XXXXX';
SET @ErrMsg = (SELECT ERROR_MESSAGE());
END CATCH;
END
如您所见,在存储过程内部没有事务处理。 我使用 TransactionScope 类处理事务代码端(C#),在事务范围内调用各种存储过程,包括上面的一个(这是失败的那个)。
问题是:如果我没有事务 SQL 端,但只有一个 try-catch 块,所有事务处理都在代码上执行,为什么 SQL 会谈论 Uncommitable Transaction?
我已经在网上搜索了很多关于 Uncommittable Transaction 错误的资料,但实际上到处都有 SQL 端的事务处理。
我希望我以一种可以理解的方式解释了这个问题。 我显然可以提供任何进一步的信息。
非常感谢您的帮助!
干杯, 加布里埃尔
【问题讨论】:
-
显示你的 c# 调用代码....
标签: c# sql sql-server transactions