StackOverFlow中有三个类似的问题,但没有一个给出答案..
如果找到了为什么会出现此错误但却不知道修复。
我正在为我的项目使用Strongly Typed Dataset
,该项目是作为DAL的dll创建的。
我已使用设计器将Sql Server Table添加到此数据集中并创建了一个DataAdapter
使用DataTableAdapter
插入时效果很好daLabTest.Insert(txtLabTestId.Text, cmbLabTestType.Text, cmbTestName.Text, txtLabFees.Text, dtpLabEffDate.Value)
但是当我想在组合框或网格视图中显示表中的数据时,我会收到此错误。
我告诉我发现了问题所在,我只是使用DataSet设计器预览了数据,发现函数返回的数据就像这样......
我写的查询数据集中的查询是
Select distinct(TestType) from LabTestTypes
所以这应该只返回一列,但数据集返回5列但其他列为null,TestName
列是主列,返回时不应为null,因此存在问题..
要解决此问题,我尝试更改NullValue
& AllowDBNull
属性分别为[Empty]
和true
,但这对我没用。
请帮助我...
答案 0 :(得分:6)
那种过于笼统的约束异常是令人讨厌的,在这么多投诉之后是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提供的任何人/无论你在哪里!)
答案 1 :(得分:0)
我在使用存储过程的DLL中的函数中出现此错误。该过程未返回表中的所有字段。排除的一个字段是不能为空的字段。这显然导致约束异常。当我更改过程和DLL以包含该字段时,异常消失了。
答案 2 :(得分:0)
在我自己花了多年时间解决这个问题后,我已经解决了修改数据集中的查询以返回输出中不需要的每个关键字段的虚拟值(可以忽略)。
所以你的查询会变成......
Select distinct TestType, 1 as ID, "Dummy" as TestName, "Dummy" as TestFees, "Dummy" as TestDate
from LabTestTypes