来自c#的sql查询中的“无法启用约束”错误消息

时间:2014-03-05 16:44:01

标签: sql dataset runtime-error constraints

我在Visual Web Developer 2010 express中使用C#和SQL。

我意识到我的问题是ENFORCECONSTRAINTS属性 - 我无法弄清楚如何修改。我在查询设计器窗口中看不到这样做的选项。我尝试在designer.cs文件中将其每个实例修改为false。不行。

当我从查询编辑器运行它时,我有以下查询。它正好返回一行,并且该行是正确的行。

SELECT  
    A.*, B.*
FROM
    tblParticipants AS A 
INNER JOIN
    tblAdministrators AS B ON A.Part_Department = B.Adm_Department
WHERE        
    (A.Part_UserID = @UID) AND (B.Adm_POC = 'Y')

我从代码中调用此查询:

    tblCertApplicationsTableAdapter certAdapter = new tblCertApplicationsTableAdapter();

    DataTable certTable = certAdapter.GetAdmContactByUID(iUserID);

当我从代码执行此查询时,它告诉我:

  

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

即使它在我使用查询窗口时正确地工作(正好返回1条正确的记录)。

我在执行这些命令之前显示iUserID,因此传递了正确的号码。

表A和B都有一个不接受空值的键列。

所有其他列都接受空值。由于所有列都设置为允许空值,因此我认为错误消息的一部分没有意义。我试着列出我需要的列 - 它不包括任何相应的键列,所以我不认为非唯一键是问题。

有没有办法告诉VWD-“看,我知道你认为你知道发生了什么,但是,请亲爱的上帝,回报你所拥有的并让我解决它?”

1 个答案:

答案 0 :(得分:0)

邮件来自TableAdapter,而不是来自SQL Server。强类型DataSet有自己的约束系统,可以强制执行可空性和关系。我怀疑在数据库中可以为空的那些列中的一个或多个在DataSet中被标记为不可为空。您可以通过将设计器中的DataTable设置为EnforceConstraints来完全更改或完全禁用False上的约束检查。