Удалите объект, который был создан как параметр метода c # - PullRequest
5 голосов
/ 07 января 2012

У меня есть следующие классы:

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;
    }
  • Как мне избавиться от объекта SqlConnection, который создается, когда GetConnection () передается как параметр в моем конструкторе SqlDataAdapter?
  • Будет ли он удаляться автоматически, когда я удаляю свой объект Adapt в методе, который вызвал GetDataAdapter ()?
  • Если вы не можете избавиться от него, как вы предлагаете действовать?

Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 07 января 2012

Описание

Если вы утилизируете ваш 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;
}
1 голос
/ 07 января 2012

Нет, адаптер не пропускает соединение.Вы должны изменить его на это как минимум:

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
}

Таким образом, вы также более гибки, имея возможность передавать какое-то другое соединение вна случай, если он понадобится для некоторых исключительных обстоятельств.

...