2014-04-09 24 views
6

Tüm hizmet paketi, C# ve .NET Framework 4.5 ile Visual Studio 2012 Ultimate sürümü ile bir WinForm uygulaması geliştiriyorum. Bu yığının ileDahili .Net Framework Veri Sağlayıcısı hatası 1

Internal .Net Framework Data Provider error 1 

:

Bu durum almak

en System.Data.ProviderBase.DbConnectionInternal.PrePush(Object expectedOwner) 
    en System.Data.ProviderBase.DbConnectionPool.PutObject(DbConnectionInternal obj, Object owningObject) 
    en System.Data.ProviderBase.DbConnectionInternal.CloseConnection(DbConnection owningObject, DbConnectionFactory connectionFactory) 
    en System.Data.SqlClient.SqlConnection.CloseInnerConnection() 
    en System.Data.SqlClient.SqlConnection.Close() 
    en AdoData.TRZIC.DisposeCurrentConnection() 
    en AdoData.TRZIC.Finalize() 

yıkıcı ilgili olarak:

~TRZIC() 
{ 
    DisposeCurrentConnection(); 

    if (this.getCodeCmd != null) 
     this.getCodeCmd.Dispose(); 
} 

private void DisposeCurrentConnection() 
{ 
    if (this.conn != null) 
    { 
     if (this.conn.State == ConnectionState.Open) 
      this.conn.Close(); 

     this.conn.Dispose(); 
     this.conn = null; 
    } 
} 

Ben çizgi this.conn.Close(); yılında istisna olsun.

Ve conn

private SqlConnection conn = null; neden biliyor musunuz nedir?

+0

bazı hatalar vardır, this.conn 'gerekmez = null; 'imha ettikten sonra, ve' DisposeCurrentConnection() 'işlevini çağırmadan önce komutunuzu atmanızı öneririm – RezaRahmati

cevap

10

Buradaki çözümü buldum: http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/b23d8492-1696-4ccb-b4d9-3e7fbacab846/.

Temelde geçerli:

Dikkat
Kapat aramalarını veya sınıfın Finalize yönteminde bir Connection, bir DataReader veya başka herhangi bir yönetilen nesne üzerinde imha etmeyin. Sonlandırıcıda, yalnızca sınıfınızın doğrudan sahip olduğu yönetilmeyen kaynakları yayınlamanız gerekir. Sınıfınızda yönetilmeyen bir kaynağa sahip değilseniz, sınıf tanımınıza bir Finalize yöntemi eklemeyin. Daha fazla bilgi için bkz. Çöp Toplama.

0

Bu cevap değil ama şiddetle bu yolla bağlantı kullanmak önerip bertaraf nesneler

hakkında endişe gerek yok
using (SqlConnection connection = new SqlConnection(connectionString)) 
{  
    try  
    { 

      connection.Open(); 
      SqlCommand command = new SqlCommand("......", connection); 
      command.ExecuteNonQuery();  
    } 
    catch (Exception) 
    { 
     /*Handle error*/ 
    } 

} 
İlgili konular