2010-05-31 62 views
0

我有我的项目在.NET中使用SQL Server中的数据库。我正在使用Linq-to-SQL,有时当项目在项目的一部分中抛出异常(约束)时,同样的错误会在项目的其他部分继续显示,当我对数据库做另一件事时。就像当我做插入操作并且在删除异常之前,插入操作会抛出删除异常,并且直到我关闭并再次打开项目为止。我的主要问题是当我的在线项目发生这种情况时,我的项目中的这个错误导致我在线测试的项目出现问题(我使用相同的数据库)。我不知道这个异常是在内存上还是其他东西,但是它已经给我带来了很多令人头疼的问题。为什么SQL Server会一直抛出异常?

这是例外,多数民众赞成抛出我的时候我做了错误的删除(不这样做级联删除)

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; 

    } 

抛出我什么都没有做什么IM做同样的例外

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."} 

我在事实上利用difer ent表格。

+3

显示这样一个异常,以及它产生的周围代码 - 否则我们只会不得不看一个魔术8球并做一些猜测。 – nos 2010-05-31 20:44:08

+0

magic 8 ball认为ODBC连接有错误? – VoodooChild 2010-05-31 20:59:28

+0

@VoodooChild:绝对! - http://web.ics.purdue.edu/~ssanty/cgi-bin/eightball.cgi – 2010-05-31 21:24:35

回答

2

我猜你仍然在异常之后仍然使用相同的DataContext,所以它仍然有相同的挂起更改(更新/插入/删除),并且当您尝试再次提交更改时,那些相同的挂起更改将再次抛出相同的异常。

如果是这种情况,有几种不同的处理方法,但最简单的方法就是丢弃'破损'的datacontext(处理它很好)并创建一个新的。既然是这样做的例外路径,我宁愿做一个这样简单的事情,而不是更复杂的东西可能运行得更快:)

+0

是的,就是这样我使用相同的DataContext,谢谢! – 2010-06-01 15:19:22

0

它听起来像你可能会显示使用会话变量的错误,但不清除每个新页面。

相关问题