C # SqlDataReader закрыть метод - PullRequest
0 голосов
/ 30 мая 2011

Какой из этих методов лучше закрыть SqlDataReader :

 SqlDataReader reader = comm.ExecuteReader();

 while (reader.Read())
 {
 }
 reader.Close();
 reader.Dispose();

или

SqlDataReader reader = comm.ExecuteReader(CommandBehavior.CloseConnection);
while (reader.Read())
{
}

или есть другие способы закрытия?

Ответы [ 4 ]

6 голосов
/ 30 мая 2011

Правильный способ обработки это выражение using:

using(SqlDataReader reader = comm.ExecuteReader(CommandBehavior.CloseConnection)) {
    while (reader.Read())
    { 

    }
}

Таким образом, объект удаляется правильно (и вам не нужно вызывать Close()).

2 голосов
/ 30 мая 2011

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

using (SqlDataReader reader = comm.ExecuteReader())
{
    while (reader.Read())
    {
        //Do stuff...
    }
}

Конечно, вы можете сделать то же самое с try { } finally { }, что и делает оператор using внутри.Я обнаружил, что, как правило, полезно всегда иметь дело с читателями с помощью оператора using, чтобы избежать вероятности утечки соединений.

0 голосов
/ 30 мая 2011

Документ, который вам нужен, это: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.close.aspx

Цитата: «Вы должны явно вызывать метод Close, когда вы используете SqlDataReader, чтобы использовать связанный SqlConnection для любых других целей».

0 голосов
/ 30 мая 2011

Используйте первый сценарий, если вы работаете с ридером в рамках одного метода, и второй, если вы передаете ридер как возвращаемое значение (не в одной области видимости).

...