已实例化为方法参数c#的Dispose对象

本文关键字:Dispose 对象 参数 实例化 方法 | 更新日期: 2023-09-27 18:19:44

我有以下类:

private static readonly string ConnectionString = "Dummy";
public static SqlConnection GetConnection()
{
    SqlConnection Connection = new SqlConnection(ConnectionString);
    return Connection;
}
public static SqlDataAdapter GetDataAdapter(string Query)
{
    SqlDataAdapter Adapt = new SqlDataAdapter(Query, GetConnection());
    return Adapt;
}
  • 在SqlDataAdapter构造函数中将GetConnection()作为参数传递时,如何处理实例化的SqlConnection对象
  • 当我在调用GetDataAdapter()的方法中处理Adapt对象时,它会自动被处理吗
  • 如果无法处理,您建议如何处理

谢谢你的帮助。

已实例化为方法参数c#的Dispose对象

描述

如果您丢弃SqlDataAdapter ,它也不会丢弃SqlConnection,因为不清楚您是否要再次使用连接。你必须改变你的设计才能完成这件事。

我建议将SqlConnection传递给GetDataAdapter函数。

样品

static void Main(string[] args)
{ 
    using (SqlConnection connection = GetConnection()) 
    {
        using (SqlDataAdapter adapter = GetDataAdapter("YourQuery", connection)) 
        {
        }
        // SqlDataAdapter is disposed
    }
    // SqlConnection is disposed
}
private static readonly string ConnectionString = "Dummy";
public static SqlConnection GetConnection()
{
    SqlConnection Connection = new SqlConnection(ConnectionString);
    return Connection;
}
public static SqlDataAdapter GetDataAdapter(string Query, SqlConnection connection)
{
    SqlDataAdapter Adapt = new SqlDataAdapter(Query, connection);
    return Adapt;
}

否,适配器不偶极连接。你至少应该把它改成这样:

public static SqlDataAdapter GetDataAdapter(SqlConnection connection, string Query)
{
    SqlDataAdapter Adapt = new SqlDataAdapter(Query);
    Adapt.Connection = connection;
    return Adapt;
}

并像这个一样使用它

using (var connection = GetConnection())
using (var adapter = GetAdapter(connection, query))
{
    // do stuff
}

通过这种方式,您还可以传递一些其他连接,以防您在某些特殊情况下需要它。