从asp.net调用SP会出错,而SSMS可以正常工作

时间:2012-03-29 10:04:22

标签: asp.net sql-server sql-server-2008 sql-server-2005 codesmith

我有两张桌子:

  1. 属性
  2. Property_Localize
  3. 和SP从属性中删除记录:

    1. (Delete_SP)
    2. 我有一个触发器触发而不是从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生成的数据库层。

3 个答案:

答案 0 :(得分:1)

SQL事件探查器

这将使您能够在从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)。