Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我的服务器因存储过程中的异常而挂起。超时已过期_C#_.net_Sql Server_Sql Server 2008 - Fatal编程技术网

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

C# 我的服务器因存储过程中的异常而挂起。超时已过期,c#,.net,sql-server,sql-server-2008,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 En

我在存储过程中编写了一个游标,基本上如下所示:

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语句的异常。所以我修复了它,但在这个异常之后,当我尝试运行我的应用程序时,它甚至不能运行最简单的查询,并且我一直得到
超时过期的消息。只有在我重新启动我的Sql Server服务之后,一切似乎都正常启动了


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

我不确定,你的代码看起来怎么样,但通常情况下,如果人们有一个糟糕的异常处理,并且与数据库的连接仍然存在,他们就会出现这种行为

如果这两个命令未运行,则应仅从此代码中获取以下异常: 通过创建: 名为“curr”的游标已存在

开幕式前: 光标已打开


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

我不确定您的代码看起来如何,但通常情况下,如果人们的异常处理不好,并且与数据库的连接仍然存在,他们就会出现这种行为

如果这两个命令未运行,则应仅从此代码中获取以下异常: 通过创建: 名为“curr”的游标已存在

开幕式前: 光标已打开


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

@David:但我为什么要在存储过程中处理try-catch呢?我已经用我的C代码处理过了。此外,即使引发异常,SQL server也不会继续执行代码吗?T-SQL不像C代码,我想当你遇到异常时,下一行代码不会执行。我猜执行了下一行SQL,但设置了@Error全局变量?如果我错了,请纠正我。为什么更新和插入操作需要游标?能否重写语句以避免游标?您是否更新/插入了大量记录?您使用哪些数据访问组件?如果是
ADO.NET
,则
SqlCommand
的默认值为30秒。你可以增加它,但这并不能解决根本问题。还要检查锁。marc#s:因为我正在进行批量操作,并且我在存储过程中传递了用户定义的类型(来自C#的DataTable),还有其他复杂的操作在进行。@David:但我为什么要在存储过程中处理try-catch?我已经用我的C代码处理过了。此外,即使引发异常,SQL server也不会继续执行代码吗?T-SQL不像C代码,我想当你遇到异常时,下一行代码不会执行。我猜执行了下一行SQL,但设置了@Error全局变量?如果我错了,请纠正我。为什么更新和插入操作需要游标?能否重写语句以避免游标?您是否更新/插入了大量记录?您使用哪些数据访问组件?如果是
ADO.NET
,则
SqlCommand
的默认值为30秒。你可以增加它,但这并不能解决根本问题。还要检查锁。marc#s:因为我正在进行批量操作,我在存储过程中传递了我的用户定义类型(C#中的DataTable),还有其他复杂的操作正在进行。