我的服务器因存储过程中的异常而被挂起。超时已过期

时间:2012-05-28 06:31:36

标签: c# .net sql-server sql-server-2008

我在存储过程中写了一个游标,基本上是这样的:

OPEN curr

    Fetch NEXT FROM curr into @ID, @IsCC, @JurisdictionID

    While @@FETCH_STATUS = 0
    Begin
        --Code for Update and Insert operations
         Fetch NEXT FROM curr into @ID, @IsCC, @JurisdictionID
    End

    CLOSE curr
    DEALLOCATE  curr

现在在While循环中,我获得了外键冲突的一个Insert语句的异常。所以我修复了它,但是在我尝试运行我的应用程序之后这个异常,它就无法运行最简单的查询而且我不断获得Timeout expired。只有在我重新启动我的Sql Server服务之后,似乎才能正常启动。

我的猜测是CLOSE和DEALLOCATE语句在我遇到异常后没有运行。如果出现这种情况我该怎么办?如果在生产过程中发生这种情况,我会感到害怕。我会像一块土豆一样被砸碎。

1 个答案:

答案 0 :(得分:0)

我不确定,你的代码看起来如何,但如果人们有异常处理错误,并且与数据库的连接仍然存在,人们通常会得到这种行为。

如果这两个命令没有运行,您应该只从此代码中获得以下异常: 通过创作: 名为“curr”的光标已存在。

并通过开幕式: 光标已经打开。

我认为你应该使数据库级别的异常处理更加安全。