2012-05-11 12 views
5

Tôi có ba bảng lồng nhau trong tập dữ liệu. Tôi hiển thị dữ liệu dựa trên ID ngôn ngữ, ví dụ: EN là 1 FR là 2 và NL là 3. Tiếng Pháp và tiếng Anh tồn tại trong cơ sở dữ liệu nhưng tiếng Hà Lan chưa tồn tại và khi người dùng chọn NL, tôi nhận được lỗi sau:Không thể bật ràng buộc này vì không phải tất cả các giá trị đều có giá trị gốc tương ứng

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

Dưới đây là mã tôi sử dụng để lấy dữ liệu. Lỗi xảy ra khi tôi cố tạo mối quan hệ trong tập dữ liệu.

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

Bây giờ câu hỏi của tôi là, làm cách nào để kiểm tra xem giá trị tồn tại trong tập dữ liệu hoặc cơ sở dữ liệu với mã đã cho bên dưới?

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

    } 

Trả lời

4

Theo mặc định, khi bạn tạo mối quan hệ, nó thực thi ràng buộc khóa ngoại, bằng cách đặt thành false, bạn đang nói rằng bạn không muốn thực thi mối quan hệ.

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

Các giải pháp là để thiết lập chế trong lớp DataRelation false

0

sử dụng subquery trong câu chọn để kiểm soát các hàng có liên quan. Đó là công việc của gonnna.

Các vấn đề liên quan