2011-09-02 12 views
10

Veri kümesine yüklenen ve ilişkili olan bir veri tabanını kaldırmaya çalışıyorum. İşte denediğim kod.Veri kümesinden bir veri kümesini nasıl kaldırabilirim (bir grup ilişkisine sahiptir)

domain.EnforceConstraints = false; 
if (domain.Tables["TABLE_NAME"] != null) 
{ 
    domain.Tables["TABLE_NAME"].ChildRelations.Clear(); 
    domain.Tables["TABLE_NAME"].ParentRelations.Clear(); 
    domain.Tables.Remove("TABLE_NAME"); 
} 
domain.EnforceConstraints = true; 

Bunun nedeni, mevcut bir yabancı anahtar tabloyu, kaldırma noktasında bir istisna atar. Ne yazık ki, mantığın yolu Kısıtlamanın adının ne olduğu hakkında hiçbir fikrim yok [bu yüzden kodu zorlayamıyorum].

Bunu daha kolay bir şekilde gerçekleştirmek için var mı, yoksa sorunuma neden olan kısıtlamanın nasıl bulunacağı ve kaldırılacağı konusunda bazı önerilerde bulunabilir miyim? peşin

sayesinde Steve

-------------------------- YANIT ---------- --------------

Kendi sorumu cevaplayamama izin verilmedi, işte geldiğim çözüm burada. Bu kod parçacığı artık benim için çalışıyor. İlişkisini diğer masaya götürmek ve kısıtlamayı oradan kaldırmak zorunda kaldım.

if (domain.Tables["TABLE_NAME"] != null) 
    { 

     for (int f = domain.Tables["TABLE_NAME"].ChildRelations.Count -1; f >=0; f--) 
     { 
      domain.Tables["TABLE_NAME"].ChildRelations[f].ChildTable.Constraints.Remove(domain.Tables["TABLE_NAME"].ChildRelations[f].RelationName); 
      domain.Tables["TABLE_NAME"].ChildRelations.RemoveAt(f); 
     } 
     domain.Tables["TABLE_NAME"].ChildRelations.Clear(); 
     domain.Tables["TABLE_NAME"].ParentRelations.Clear(); 
     domain.Tables["TABLE_NAME"].Constraints.Clear(); 
     domain.Tables.Remove("TABLE_NAME"); 
    } 
+0

alanı (tip System.Data.DataSet ait) bir veri kümesi ama evet, verilerin ilk başta SQL SERVER 2005 – Steve

+0

@Chris o ADO.NET nesnelerle bellekte çalışıyor den yüklendi, veritabanı altyapısı bu bağlamda uygun değildir. –

+0

Üç satırlık etki alanını kullanma gereği duymadım.Tablolar ["TABLE_NAME"]. ChildRelations.Clear(); domain.Tables ["TABLE_NAME"]. ParentRelations.Clear(); domain.Tables ["TABLE_NAME"]. Kısıtlamalar.Clear(); –

cevap

5

böyle bir şey bütün constaints temizlemek için deneyin veri kümesi tabloyu kaldırmak önce:

domain.Tables["TABLE_NAME"].Constraints.Clear(); 

çalışmalı ve daha sonra veri kümesi çıkarmak gerekir. Eğer kaldırılamaz PK Kısıtlama sorunu varsa

bu deneyin:

 var myTable = domain.Tables["TABLE_NAME"]; 

     for (int i = myTable.Constraints.Count - 1; i >= 0; --i) 
     { 
      if (myTable.Constraints[i] is System.Data.ForeignKeyConstraint) 
      { 
       myTable.Constraints.Remove(myTable.Constraints[i]); 
      } 
     } 
+0

Maalesef bunu zaten denedim. Bir istisna "Özel kısıtlama 'PrimaryKey' kaldırılamıyor. Öncelikle CONSTRAINT_NAME adlı yabancı anahtar kısıtlamasını kaldırın". Bu, kaldır çağrılarının bana geri döndüğü aynı yabancı anahtardır. – Steve

+0

Yine de hayır yok, snippet'inizi aramadan önce kaldırmaya çalıştığımda ve ParentRelations.Clear() çağrısından sonra yalnızca bir fk kısıtlaması bulur.Soruna neden olan değil. En garip şey. – Steve

+0

Tahmin et veri kümesindeki her bir tablo boyunca yineleyeceğim. – Steve

0

Cevabın doğru Fakat tablolar DataSetbırakma silinmez .. Yine kullanıcı aynı tablo oluşturmak istiyorsa kalır (domain.Tables [ "TABLE_NAME"]! = null) {

for (int f = domain.Tables["TABLE_NAME"].ChildRelations.Count -1; f >=0; f--) 
    { 
     domain.Tables["TABLE_NAME"].ChildRelations[f].ChildTable.Constraints.Remove(domain.Tables["TABLE_NAME"].ChildRelations[f].RelationName); 
     domain.Tables["TABLE_NAME"].ChildRelations.RemoveAt(f); 
    } 
    domain.Tables["TABLE_NAME"].ChildRelations.Clear(); 
    domain.Tables["TABLE_NAME"].ParentRelations.Clear(); 
    domain.Tables["TABLE_NAME"].Constraints.Clear(); 
    domain.Tables.Remove("TABLE_NAME"); 
} 
İşte
+0

Ne elde ettiğinden emin değilim. Ek bilgi ister misiniz? – Steve

1

ise ..

.. o zaman Tablo var gösterecektir adının ne Benim için çalıştı:

DataTable table = dataSet.Tables["TABLE_NAME"]; 
while (table.ChildRelations.Count > 0) 
{ 
    var relation = table.ChildRelations[0]; 
    dataSet.Tables[relation.ChildTable.TableName].Constraints.Remove(relation.RelationName); 
    dataSet.Relations.Remove(relation); 
} 

while (table.ParentRelations.Count > 0) 
{ 
    dataSet.Relations.Remove(table.ParentRelations[0]); 
} 

table.Constraints.Clear(); 

dataSet.Tables.Remove(table); 
table.Dispose(); 
0

senin İlk DataSet çocuk masaları ve daha sonra üst tablo kaldırmak, ForeignKey Kısıtlama hata almaya edin.

Selamlar, Vinay

İlgili konular