2012-05-11 31 views
5

Tengo tres tablas anidadas en un conjunto de datos. Expongo los datos en función de la ID del idioma, es decir: EN es 1 FR es 2 y NL es 3. Francés e inglés existen en la base de datos pero el holandés aún no existe y cuando el usuario selecciona NL aparece el siguiente error:Esta restricción no se puede habilitar porque no todos los valores tienen los valores principales correspondientes

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

A continuación se muestra el código que utilizo para obtener los datos. El error ocurre cuando intento crear relaciones en el conjunto de datos.

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

Ahora mi pregunta es, ¿cómo puedo verificar si el valor existe en el conjunto de datos o la base de datos con el siguiente código?

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

    } 

Respuesta

4

De manera predeterminada, cuando se crea una relación, que hace cumplir las restricciones de clave externa, mediante el establecimiento de falsa, le está diciendo que que usted no desea aplicar la relación.

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

Las soluciones es establecer limitación en la clase DataRelation en false

0

utilizar la sub consulta en sentencias de selección para controlar las filas relacionadas. Es trabajo de gonnna.

Cuestiones relacionadas