【问题标题】:Why does SQL Server keep throwing exceptions?为什么 SQL Server 不断抛出异常?
【发布时间】:2010-05-31 20:37:24
【问题描述】:

我在 .NET 中有我的项目,它使用 SQL Server 中的数据库。我正在使用 Linq-to-SQL,有时当项目在项目的一部分中向我抛出异常(约束)时,当我对数据库执行另一项操作时,同样的错误会一直显示在项目的其他部分中。就像当我进行插入时,我在删除时遇到异常,插入会抛出删除异常,并且它一直保持这种状态,直到我关闭并再次打开项目。我的主要问题是当我的在线项目中发生这种情况时,我的项目中的这个错误导致我在在线测试的项目中出现问题(我使用相同的数据库)。我不知道这个异常是在内存上还是什么,但它让我很头疼。

这是我执行错误删除(不执行级联删除)时抛出的异常

var actividad = (from ta in modeloDatos.tActividad
                         where ta.id_actividad == idActividad
                         select ta).Single()
     modeloDatos.tActividad.DeleteOnSubmit(actividad);
        modeloDatos.SubmitChanges();
        return true;
    }
    catch (Exception ex)
    {
        return false;

    }

    ex = {"The DELETE statement conflicted with the REFERENCE constraint \"FK_tActividadRiesgo_tActividad\". The conflict occurred in database \"DBDESARROLLO\", table \"dbo.tActividadRiesgo\".\r\nThe statement has been terminated."}

当它进入这段代码时(插入)

  proceso.id_encabezado = encabezadoProceso.id_encabezado;
        proceso.id_procesopadre = idProcesoPadre;
        modeloDatos.tProceso.InsertOnSubmit(proceso);
        modeloDatos.SubmitChanges();
 catch (Exception ex)
    {
        return -1;

    }

向我抛出与我在做什么无关的完全相同的异常

ex = {"The DELETE statement conflicted with the REFERENCE constraint \"FK_tActividadRiesgo_tActividad\". The conflict occurred in database \"DBDESARROLLO\", table \"dbo.tActividadRiesgo\".\r\nThe statement has been terminated."}

我实际上是在使用不同的表。

【问题讨论】:

  • 显示这样一个异常,以及它产生的周围代码 - 否则我们只需要查看一个魔术 8 球并做一些猜测。
  • 魔8球认为ODBC连接有错误?
  • 另外,显示连接字符串?

标签: c# .net sql-server linq-to-sql


【解决方案1】:

我猜您即使在异常发生后仍在使用相同的 DataContext,所以它仍然具有相同的待处理更改(更新/插入/删除),并且当您尝试再次提交更改时,这些相同的待处理更改将再次抛出相同的异常。

如果是这种情况,有几种不同的处理方法,但最简单的方法是丢弃“损坏的”数据上下文(将其处理得更好)并创建一个新的。由于这是执行此操作的异常路径,因此我宁愿做这样更简单的事情,而不是可能运行得更快的更复杂的事情:)

【讨论】:

  • 是的,就是这样,我正在使用相同的 DataContext,谢谢!!
【解决方案2】:

听起来您可能正在使用会话变量显示错误,但没有为每个新页面清除它。

【讨论】:

    猜你喜欢
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2014-07-09
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多