C# 内部.Net Framework数据提供程序错误1

C# 内部.Net Framework数据提供程序错误1,c#,.net,ado.net,destructor,C#,.net,Ado.net,Destructor,我正在用Visual Studio 2012终极版开发一个WinForm应用程序,其中包含所有service pack、C#和.NET Framework 4.5 我得到一个例外: Internal .Net Framework Data Provider error 1 使用此堆栈: en System.Data.ProviderBase.DbConnectionInternal.PrePush(Object expectedOwner) en System.Data.Provi

我正在用Visual Studio 2012终极版开发一个WinForm应用程序,其中包含所有service pack、C#和.NET Framework 4.5

我得到一个例外:

Internal .Net Framework Data Provider error 1
使用此堆栈:

   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() 
在析构函数中:

~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;
    }
}
我在
this.conn.Close()行中得到异常

并且
conn
private-SqlConnection-conn=null

你知道为什么吗?

我找到了解决办法

基本上可以归结为:

谨慎

不要在类的Finalize方法中对连接、DataReader或任何其他托管对象调用Close或Dispose。在终结器中,应该只释放类直接拥有的非托管资源。如果类不拥有任何非托管资源,请不要在类定义中包含Finalize方法。有关更多信息,请参阅垃圾收集


这不是答案,但我强烈建议您使用
处理连接。那么你就不必担心处理对象了

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

有一些错误,您不需要
this.conn=null在处理它之后,并且我建议在调用
DisposeCurrentConnection()
之前处理您的命令如果您无条件地处理连接,您也可以在
dispose()
方法中间接遇到此问题。只有在(disposing)
的情况下,才应处置它。