无法启用此约束,因为并非所有值都有对应的父值
Posted
技术标签:
【中文标题】无法启用此约束,因为并非所有值都有对应的父值【英文标题】:This constraint cannot be enabled as not all values have corresponding parent values 【发布时间】:2012-05-20 09:02:12 【问题描述】:我在一个数据集中有三个嵌套表。我根据语言 ID 显示数据,即:EN 为 1 FR 为 2,NL 为 3。数据库中存在法语和英语但荷兰语尚不存在,当用户选择 NL 时出现以下错误:
无法启用此约束,因为并非所有值都有对应的 父值。
下面是我用来获取数据的代码。当我尝试在数据集中创建关系时发生错误。
(ds.Relations.Add(new DataRelation("Cat_SubCat", dk1, dk2));
现在我的问题是,如何使用下面给定的代码检查数据集或数据库中是否存在该值?
public static DataTable GetData(Int32 languageID)
DataSet ds = new DataSet();
string commandText = @"SELECT * FROM AlacarteCat where languageID = @ID;
SELECT * FROM AlacarteSubCat where languageID = @ID;
SELECT * from AlacarteItems where languageID = @ID";
using (SqlConnection myConnection = new SqlConnection(Common.GetConnectionString("SQLConnectionString")))
SqlCommand command = new SqlCommand(commandText, myConnection);
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = languageID;
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = command;
da.TableMappings.Add("AlacarteCat", "AlacarteCat"); // table 0
da.TableMappings.Add("AlacarteSubCat", "AlacarteSubCat"); // table 1
da.TableMappings.Add("AlacarteItems", "AlacarteItems"); // table 2
da.Fill(ds, "AlacarteCat");
DataColumn dk1 = ds.Tables[0].Columns["ID"];
DataColumn dk2 = ds.Tables[1].Columns["AlacarteCatID"];
DataColumn dk3 = ds.Tables[1].Columns["ID"];
DataColumn dk4 = ds.Tables[2].Columns["AlacarteSubCatID"];
DataColumn dk5 = ds.Tables[0].Columns["id"];
DataColumn dk6 = ds.Tables[2].Columns["AlacarteCatID"];
ds.Relations.Add(new DataRelation("Cat_SubCat", dk1, dk2));
ds.Relations.Add(new DataRelation("SubCat_Items", dk3, dk4));
ds.Relations.Add(new DataRelation("Cat_Items", dk5, dk6));
if ((ds != null))
return ds.Tables["AlacarteCat"];
return null;
【问题讨论】:
【参考方案1】:默认情况下,当您创建关系时,它会强制执行外键约束,通过设置为 false,您是在告诉它您不想强制执行该关系。
ds1.DataRelation.Add(“relCustOrder”, parentCol, childCol, false)
解决方法是将DataRelation类中的约束设置为false
【讨论】:
【参考方案2】:在选择语句中使用子查询来控制相关行。 它会工作的。
【讨论】:
【参考方案3】:我通过添加缺少的表条目解决了我的问题。我用 sql server 表构建菜单树。
您也必须在表格中缺少一个条目
一些 childCol 正在变为 NULL
【讨论】:
以上是关于无法启用此约束,因为并非所有值都有对应的父值的主要内容,如果未能解决你的问题,请参考以下文章