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

时间:2012-01-06 22:24:24

标签: c# parameters dispose

我有以下课程:

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对象时会自动处理吗?
  • 如果无法处理它,你建议如何处理?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

不,适配器不会连接。你应该至少改变它:

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
}

通过这种方式,您可以更灵活地传递其他连接 - 如果您需要一些特殊的环境。

答案 1 :(得分:1)

描述

如果您丢弃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;
}