我有两张桌子:
和SP从属性中删除记录:
我有一个触发器触发而不是从Property中删除记录,它首先从Property_Localize
表中删除相关记录,然后从Property表中删除记录..
Property table's
主键在其他表中也用作外键。
现在我们正尝试从Delete_SP.
如果property
表在任何其他表中都有关联的记录,它会抛出异常,这个异常在try..catch block
中处理,因此在任何情况下SP都会在输出参数中返回一些默认值并成功执行。
如果我们从后端运行此SP(SQL Server Management Studio),这非常正常。
但是当我们从asp.net执行这个SP时,会出现以下错误:
“批次结束时检测到不可提交的交易 交易被回滚。“
虽然它提供了正确的输出参数。
我们还尝试在触发器中添加try catch和显式事务块,但它仍然会出现相同的错误。
任何帮助都将不胜感激。
我忘了提及,我正在使用CodeSmith生成的数据库层。
答案 0 :(得分:1)
这将使您能够在从ASP.Net到数据库的请求期间跟踪查询的所有阶段。
Create Proc ProcedureName
@UserName Varchar(50),
@Password Varchar(50),
@Email Varchar(50)
As
SET NOCOUNT ON
SET XACT_ABORT ON
Begin Try
Begin Tran
//Your Code
Commit Tran
End Try
Begin Catch
Rollback Tran
End Catch
答案 1 :(得分:0)
SSMS可以拥有自己在执行sproc时使用的配置设置,这些配置设置与从Ado.Net调用存储过程时使用的设置不一定相同。 默认情况下,Ado.Net的连接应该使用默认的服务器设置,如果两者之间存在差异则可以解释差异。
答案 2 :(得分:0)
也许这会有所帮助。 [强调我的标题]
http://msdn.microsoft.com/en-us/library/ms175976.aspx
不可提交的交易和XACT_STATE
如果TRY块中生成的错误导致当前事务的状态无效,则该事务被分类为不可提交的事务。通常在TRY块之外结束事务的错误会导致事务在TRY块内发生错误时进入不可提交状态。不可提交的事务只能执行读操作或ROLLBACK TRANSACTION。事务不能执行任何会生成写操作或COMMIT TRANSACTION的Transact-SQL语句。如果事务已被分类为不可提交的事务,则XACT_STATE函数返回值-1。批处理完成后,数据库引擎将回滚所有活动的不可提交事务。 如果事务进入不可提交状态时未发送错误消息,则批处理完成时,将向客户端应用程序发送错误消息。这表示检测到并回滚了无法提交的事务。 / p>
有关不可提交事务和XACT_STATE函数的详细信息,请参阅XACT_STATE(Transact-SQL)。