无法启用约束。使用数据表适配器时

时间:2011-10-14 22:07:09

标签: c# .net sql tableadapter

我正在

  

无法启用约束。一行或多行包含值   违反非空,唯一或外键约束。

用于我的表适配器中的以下查询。

select 
f.id, f.name, p.productid, p.masterproductID, f.productid, f.dateCreated, f.retired, p.code as HTML_DisplayName, p.ThumbnailID, p.code
from FormSaveData f 

inner join Products p on (f.productid = p.ProductID or f.productId = p.MasterProductID)

where f.userId = 130559
and (p.b_IsArchived = 0 and p.b_IsRetired=0 and p.b_IsStaged = 0)

当我自己运行查询时,它工作正常,其他userIds也可以正常工作,所以这是一个非常特殊的情况。我把它缩小到我内心加入的事实

f.productid = p.ProductID **or** f.productId = p.MasterProductID

我相信在某些罕见的情况下,这会导致表适配器不喜欢的某种冲突。对于表适配器和SQL,我几乎是一个新手,因此任何有关如何更好地编写这些内容或为什么会发生这种情况的建议都将非常感激。

FormSaveData表中没有任何约束,键或特殊规则设置。

2 个答案:

答案 0 :(得分:9)

在我看来,您的查询返回了几个具有相同product_id的记录,而表适配器只需要唯一的行。我非常确定您可以将EnforceConstraints设置为false来禁用此行为。

答案 1 :(得分:4)

如果您不需要[id]作为主键,

删除其主键属性:

在您的数据集> TableAdapter>右键单击[id]列>选择删除键...

问题将得到解决。