2012-05-11 18 views
5

Ho tre tabelle nidificate in un set di dati. Visualizzo i dati in base all'ID lingua, ovvero: EN è 1 FR è 2 e NL è 3. Francese e inglese esistono nel database, ma l'olandese non esiste ancora e quando l'utente seleziona NL ottengo il seguente errore:Questo vincolo non può essere abilitato poiché non tutti i valori hanno valori parent corrispondenti

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

Di seguito è riportato il codice che utilizzo per ottenere i dati. L'errore si verifica quando provo a creare relazioni nel set di dati.

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

Ora la mia domanda è: come posso controllare se il valore esiste nel set di dati o database con il codice indicato di seguito?

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

    } 

risposta

4

Per impostazione predefinita, quando si crea un rapporto, si impone vincoli di chiave esterna, impostando su false, si sta dicendo è che non volete far rispettare il rapporto.

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

Le soluzioni è impostare vincolo in classe DataRelation false

0

utilizzare sottoquery in istruzioni select per controllare le righe correlate. È lavoro gonnna.

Problemi correlati