2011-09-02 9 views
10

मैं एक datatable कि एक डाटासेट में लोड किया गया था को निकालने का प्रयास कर रहा हूँ (रिश्तों का एक समूह है), और संबंधित किया गया है। यहां कोड मैंने कोशिश की है।मैं कैसे एक डाटासेट से एक datatable निकालूँ

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; 

यह मौजूदा विदेशी बाधा के कारण तालिका को हटाने के बिंदु पर अपवाद फेंकता है। दुर्भाग्य से, जिस तरह से तर्क मैं पता नहीं क्या बाधा का नाम है है [तो मैं मुश्किल नहीं कोड कर सकते हैं यह]।

वहाँ दूर एक आसान तरीके से यह पूरा करने के है, या मैं कैसे पता लगाने और बाधा जो कि मेरी समस्या खड़ी कर रहा है को दूर करने के लिए के रूप में कुछ सुझाव प्राप्त कर सकते हैं।

अग्रिम धन्यवाद, स्टीव

-------------------------- उत्तर ---------- --------------

मैं तो यहाँ अपने खुद के सवाल का जवाब देने की अनुमति नहीं थी है समाधान मैं के साथ आया था। यह कोड स्निपेट अब मेरे लिए काम करता है। मुझे दूसरी मेज के संबंध में यात्रा करना पड़ा और वहां से बाधा को दूर करना पड़ा।

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

डोमेन (प्रकार System.Data.Dataset की) एक डाटासेट है, लेकिन हाँ, मूल रूप से डेटा SQL सर्वर 2005 – Steve

+0

@Chris वह स्मृति में ADO.NET वस्तुओं के साथ काम कर रहा है से लोड किया गया था, डेटाबेस इंजन इस संदर्भ में प्रासंगिक नहीं है। –

+0

मुझे पता चला कि मुझे तीन लाइनों डोमेन टेबल्स ["TABLE_NAME"] करने की आवश्यकता नहीं है। ChildRelations.Clear(); । domain.Tables [ "TABLE_NAME"] ParentRelations.Clear(); । domain.Tables [ "TABLE_NAME"] Constraints.Clear(); –

उत्तर

5

इससे पहले कि आप अपने सभी constaints, कुछ इस तरह स्पष्ट करने की कोशिश डाटासेट से तालिका निकालें:

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

काम करना चाहिए और आप तो डाटासेट से निकालने के लिए सक्षम होना चाहिए।

अगर आप पी बाधा जो हटाया नहीं जा सकता के साथ मुद्दा है इस प्रयास करें:

 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

दुर्भाग्यवश, मैंने पहले ही यह कोशिश की। मुझे एक अपवाद मिलता है "अनन्य बाधा 'प्राथमिककि' को हटा नहीं सकता है। पहले विदेशी कुंजी बाधा CONSTRAINT_NAME को हटाएं"। यह वही विदेशी कुंजी है जिसे निकालने का कॉल मुझे वापस देता है। – Steve

+0

अभी भी कोई नहीं जाना है, जब मैं कॉल करने से पहले और स्नैंट्रेटेशन पर कॉल के बाद अपने स्निपेट को सम्मिलित करने का प्रयास करता हूं। क्लीयर() यह केवल एक एफके बाधा पाता है।वह मुद्दा नहीं है जो इस मुद्दे का कारण बन रहा है। यह अजीब चीज है। – Steve

+0

मान लीजिए कि मैं डेटासेट में प्रत्येक तालिका के माध्यम से फिर से शुरू करने जा रहा हूं। – Steve

0

आपका उत्तर सही है लेकिन टेबल डेटासेट से नहीं हटाया जाता है .. फिर भी यह बनी हुई है उपयोगकर्ता एक ही तालिका बनाने के लिए चाहता है नाम .. तो यह दिखाएगा तालिका मौजूद है ..

अगर (domain.Tables [ "TABLE_NAME"]! = नल) {

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

मुझे यकीन नहीं है कि आप क्या प्राप्त कर रहे हैं। क्या आप अतिरिक्त जानकारी मांग रहे हैं? – Steve

1

यहाँ है क्या मेरे लिए काम किया:

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

अपने ForeignKey बाधा त्रुटि मिल रही है, सबसे पहले डेटासेट से बच्चे टेबल और उसके बाद माता-पिता तालिका को निकाल देते हैं।

सादर, विनय

संबंधित मुद्दे