【问题标题】:Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints. error in VB.Net无法启用约束。一行或多行包含违反非空、唯一或外键约束的值。 VB.Net 中的错误
【发布时间】:2012-01-16 21:49:50
【问题描述】:

StackOverFlow 中有三个类似的问题,但没有一个给出答案..

如果已找到此错误发生的原因但不知道解决方法。

我正在为我的项目使用Strongly Typed Dataset,该项目是作为 DAL 的 dll 创建的。

我已使用设计器将 Sql Server 表添加到此数据集中并创建了一个 DataAdapter

当我使用 DataTableAdapter 插入时它工作正常

daLabTest.Insert(txtLabTestId.Text, cmbLabTestType.Text, cmbTestName.Text, txtLabFees.Text, dtpLabEffDate.Value)

但是当我想在组合框或网格视图中显示表格中的数据时,我得到了这个错误。

我告诉我发现了问题所在,我只是使用DataSet设计器预览了数据,发现Function返回的数据是这样的......

我为在数据集中查看此内容而编写的查询是

Select distinct(TestType) from LabTestTypes

所以这应该只返回一列,但数据集返回 5 列,但其他列为 null,并且 TestName 列是主列,返回时不应为 null,因此存在问题..

为了解决这个问题,我尝试将NullValueAllowDBNull 属性分别更改为[Empty]true,但这对我不起作用。

请帮帮我...

【问题讨论】:

    标签: vb.net visual-studio-2010 dataset sql-server-2008-r2 strongly-typed-dataset


    【解决方案1】:

    那个过于笼统的约束异常很讨厌,这么多抱怨后的InnerException呢?!

    此模板可能有助于识别问题行和列,但需要查询功能的“填充”版本。例如。 GetDistinct*() --> 填充*()。然后可以创建一个表并查询该行的错误文本。

        SomeTable tTable = new SomeTable()
        try {
           // sorry, if you have a GetData, change to the fill version
             someTable.FillByActiveLogin(tTable, loginName);
        } catch (System.Data.ConstraintException constrExc) {             
                System.Data.DataRow[] rowsErr = tTable.GetErrors();
                for (int i = 0; i < rowsErr.Count(); i++)
                    if (rowsErr[i].HasErrors)
                      Dbg.WriteLine(rowsErr[i].RowError);
        }
    

    (感谢 Michael S 的提示,无论您身在何处!)

    【讨论】:

      【解决方案2】:

      我在来自使用存储过程的 DLL 的函数中收到此错误。该过程没有返回表中的所有字段。排除的字段之一是不能为空的。这显然导致了约束异常。当我更改过程和 DLL 以包含该字段时,异常消失了。

      【讨论】:

        【解决方案3】:

        我自己在这个问题上花费了很长时间后,我已经解决了它修改数据集中的查询,为输出中不需要的每个关键字段返回一个虚拟值(可以忽略)。

        所以你的查询会变成...

        Select distinct TestType, 1 as ID, "Dummy" as TestName, "Dummy" as TestFees, "Dummy" as TestDate  
        from LabTestTypes
        

        【讨论】:

          猜你喜欢
          • 2012-03-30
          • 2015-12-13
          • 1970-01-01
          • 2012-11-10
          • 1970-01-01
          相关资源
          最近更新 更多