Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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
未能启用约束。一个或多个行包含违反非空、唯一或外键约束的值。VB.Net中的错误_Vb.net_Visual Studio 2010_Dataset_Sql Server 2008 R2_Strongly Typed Dataset - Fatal编程技术网

未能启用约束。一个或多个行包含违反非空、唯一或外键约束的值。VB.Net中的错误

未能启用约束。一个或多个行包含违反非空、唯一或外键约束的值。VB.Net中的错误,vb.net,visual-studio-2010,dataset,sql-server-2008-r2,strongly-typed-dataset,Vb.net,Visual Studio 2010,Dataset,Sql Server 2008 R2,Strongly Typed Dataset,StackOverFlow中有三个类似的问题,但没有一个给出答案 如果您已经找到了发生此错误的原因,但不知道修复方法 我正在为我的项目使用强类型数据集,该项目是作为DAL的dll创建的 我已经使用设计器将Sql Server表添加到此数据集中,并创建了一个DataAdapter 当我使用DataTableAdapter插入时,它可以正常工作 daLabTest.Insert(txtLabTestId.Text, cmbLabTestType.Text, cmbTestName.Text, tx

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

如果您已经找到了发生此错误的原因,但不知道修复方法

我正在为我的项目使用
强类型数据集
,该项目是作为DAL的dll创建的

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

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

daLabTest.Insert(txtLabTestId.Text, cmbLabTestType.Text, cmbTestName.Text, txtLabFees.Text, dtpLabEffDate.Value)
但是当我想在组合框或gridview中显示表中的数据时,我会遇到这个错误

我说我发现了问题所在,我只是使用DataSet designer预览了数据,发现函数返回如下数据

我为在dataset中查看此数据而编写的查询是

Select distinct(TestType) from LabTestTypes
因此,这应该只返回一列,但数据集将返回5列,而其他列将返回null,并且
TestName
列是主列,返回时不应为null,因此问题存在

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


请帮我解决这个问题…

过度一般的约束异常是令人讨厌的,在这么多抱怨之后,InnerException在哪里

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

    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);
    }
SomeTable-tTable=new-SomeTable()
试一试{
//抱歉,如果您有GetData,请更改为填充版本
FillByActiveLogin(tTable,loginName);
}catch(System.Data.ConstraintException){
System.Data.DataRow[]rowsErr=tTable.GetErrors();
对于(int i=0;i

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

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

在我自己花了很长时间研究这个问题之后,我解决了这个问题,修改了数据集中的查询,为输出中不需要的每个键字段返回一个伪值(可以忽略)

所以你的问题会变成

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