2012-07-11 12 views
5

यह वीएस 2005 का उपयोग करके लिखा गया एक .NET 2.0 एप्लिकेशन है। यह .NET 2.0 चलाने वाले सिस्टम पर ठीक काम करता है, लेकिन .NET 4.0 चलाने वाले सिस्टम पर हार्ड क्रैश। यहाँ कोड के महत्वपूर्ण खंड है:जब मैं OleDBDataAdapter ऑब्जेक्ट का उपयोग OleDBConnection ऑब्जेक्ट के बिना करता हूं तो .NET 4.0 के तहत मेरा .NET 2.0 एप्लिकेशन क्रैश क्यों होता है?

 string selectCommand1 = .... 
     string connectionString1 = .... 
     using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand1, connectionString1)) 
     { 
      try 
      { 
       adapter.Fill(table1); 
      } 
      catch 
      { 
       MessageBox.Show("error"); 
      } 
     } 

     string selectCommand2 = .... 
     string connectionString2 = .... 
     using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand2, connectionString2)) 
     { 
      try 
      { 
       adapter.Fill(table2); 
      } 
      catch 
      { 
       MessageBox.Show("error"); 
      } 
     } 

फिर, यह .NET 2.0 के तहत काम करता है, .NET 4.0

ConnectionStrings 1 & 2 संदर्भ अलग .xls फ़ाइलों के तहत दुर्घटनाओं।

मुझे पता चला कि इस समस्या के आसपास का तरीका OleDbConnection के फ़ील्ड वेरिएबल को घोषित करना और प्रारंभ करना है, OleDbDataAdapter का उपयोग कथन का उपयोग करने से पहले कनेक्शन स्ट्रिंग प्रॉपर्टी और ओपन() सेट करें। इतना के रूप में:

OleDbConnection connection = new OleDbConnection(); 

    ....... 

     connection.ConnectionString = connectionString1; 
     connection.Open(); 
     using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand1, connection)) 
     { 
      try 
      { 
       adapter.Fill(table1); 
      } 
      catch 
      { 
       MessageBox.Show("error"); 
      } 
     } 

     connection.Close(); 
     connection.ConnectionString = connectionString2; 
     connection.Open(); 
     using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand2, connection)) 
     { 
      try 
      { 
       adapter.Fill(table2); 
      } 
      catch 
      { 
       MessageBox.Show("error"); 
      } 
     } 

यह मानना ​​है, लेकिन एक समय में कोड एक की तर्ज को दूर करने और खत्म हो गया फिर कंपाइल और अधिक के बाद कि यही कारण है कि मेरे ऐप कठिन था (कोई त्रुटि संदेश) .NET 4.0 के तहत दुर्घटनाग्रस्त है मुश्किल है मैंने पाया कि समस्या का कारण बनना है।

मुझे खुशी है कि मैंने समस्या हल की है, लेकिन मैं इस तथ्य से संतुष्ट नहीं हूं कि पहला कोड .NET 4.0 के साथ काम नहीं करेगा।

क्या कोई यह बता सकता है कि .NET 4.0 उपरोक्त की तरह कोड के साथ काम करना क्यों पसंद नहीं करता है?

+1

एमएसडीएन के मुताबिक, आप जिस ओलेडीबीडेटा एडाप्टर कन्स्ट्रक्टर का उपयोग कर रहे हैं वह अंतर्निहित रूप से निर्मित कनेक्शन नहीं खोलता है। http://msdn.microsoft.com/en-us/library/2f8y4737%28v=vs.100%29 हालांकि, यदि आप उस दस्तावेज़ के 2.0 संस्करण को देखते हैं, तो यह वही चेतावनी देता है। –

+0

यह दिलचस्प है। अभी भी सवाल नहीं है कि यह .NET 2.0 के तहत क्यों काम करता है लेकिन नहीं .net 4.0 –

+2

क्या आपने विंडोज इवेंट लॉग की जांच की है कि क्या क्रैश के लिए कोई संकेत है या नहीं (क्योंकि आपने कहा है कि कोई स्पष्ट त्रुटि संदेश नहीं है? इसके अलावा, आप बस पकड़ रहे हैं ... क्या होता है यदि आप 'पकड़ लें (अपवाद पूर्व) {संदेशबॉक्स। शो (उदा। संदेश);} ' –

उत्तर

3

समस्या "एप्लिकेशन सत्यापनकर्ता" थी। इसे अनइंस्टॉल करने से समस्या हल हो गई।

2

अपने मूल कोड (कनेक्शन.ऑपेन के बिना) में, क्या आपने adapter.Fill(table1) पर कॉल करने से पहले टेबल प्रारंभ किए हैं?

using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand1, connectionString1)) 
    { 
     using (System.Data.DataTable table1 = new System.Data.DataTable()) { 

      try 
      { 
       adapter.Fill(table1); 
      } 
      catch 
      { 
       MessageBox.Show("error"); 
      } 
     } 
    } 
+0

हाँ टेबल प्रारंभ कर रहे हैं। –

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