2012-05-11 22 views
5

Veri kümesinde üç iç içe geçmiş tablo var. Verileri dil kimliğine göre görüntülüyorum, örneğin: EN 1 FR 2 ve NL 3'tür. Veritabanında Fransızca ve ingilizce var ama Dutch henüz mevcut değil ve kullanıcı NL'yi seçtiğinde şu hatayı alıyorum:Bu kısıtlama, tüm değerler karşılık gelen üst değerler olmadığından etkinleştirilemez.

This constraint cannot be enabled as not all values have corresponding parent values.

Verileri almak için kullandığım kod aşağıdadır. Hata, veri kümesinde ilişkiler oluşturmaya çalıştığımda olur. değeri aşağıda verilen kod ile veri kümesi ya da veritabanında varsa

(ds.Relations.Add(new DataRelation("Cat_SubCat", dk1, dk2)); 

Şimdi benim sorum, nasıl kontrol edebilirim edilir?

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; 
     } 

    } 

cevap

4
Varsayılan olarak

, bir ilişki oluştururken, bu false ayarlayarak, size ilişki zorlamak istemiyorum o kadar anlatıyorsun, yabancı anahtar kısıtlamaları uygular.

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

çözümler ilgili satırları kontrol etmek seçme tablolara alt sorgu kullanmak yanlış

0

için DataRelation sınıfında kısıtlamayı ayarlamaktır. Bu gonnna çalışmasıdır.