2012-05-11 14 views
5

Mam trzy zagnieżdżone tabele w zbiorze danych. Wyświetlam dane na podstawie identyfikatora języka, tj .: EN to 1 FR to 2, a NL to 3. Francuski i angielski istnieją w bazie danych, ale język holenderski jeszcze nie istnieje, a gdy użytkownik wybierze język NL, pojawia się następujący błąd:Nie można włączyć tego ograniczenia, ponieważ nie wszystkie wartości mają odpowiednie wartości nadrzędne.

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

Poniżej znajduje się kod, którego używam do pobierania danych. Błąd występuje, gdy próbuję utworzyć relacje w zbiorze danych.

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

Teraz moje pytanie brzmi: jak mogę sprawdzić, czy wartość istnieje w zbiorze danych lub w bazie danych z podanym poniżej kodem?

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

    } 

Odpowiedz

4

Domyślnie podczas tworzenia relacji, to wymusza kluczy obcych, poprzez ustawienie na false, to mówisz, że nie chcesz, aby wymusić relacji.

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

rozwiązania jest ustawienie ograniczenia w klasie DataRelation do fałszywych

0

użyć podzapytania w wybranych sprawozdań kontrolować powiązanych wierszy. To jest praca gonna.

Powiązane problemy