9

我在数据集中有三个嵌套表。我根据语言 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;
        }

    }
4

3 回答 3

14

默认情况下,当您创建关系时,它会强制执行外键约束,通过设置为 false,您会告诉它您不想强制执行关系。

ds1.DataRelation.Add(“relCustOrder”, parentCol, childCol, false)

解决方案是将 DataRelation 类中的约束设置为 false

于 2017-02-03T20:30:26.703 回答
-1

在 select 语句中使用子查询来控制相关的行。它会工作的。

于 2017-10-18T13:48:28.127 回答
-1

我通过添加缺少的表条目解决了我的问题。我用来从 sql server 表构建菜单树。

您也必须在表格中丢失一个条目

一些 childCol 正在变为 NULL

于 2019-04-11T13:12:22.097 回答