как закрыть sqlconnection в asp.net - PullRequest
1 голос
/ 17 мая 2010

Я хотел бы знать, если что-то не так в этом коде asp.net:

mydatareader = mycmd.executeReader()
if myDataReader.HasRow then
      // Do something
end if
myConnection.Close()

Если я не вызываю MyDataReader.Close (), соединение закрывается? Я спрашиваю об этом, потому что я предполагаю, что если вызвать «MyConn.Close», он автоматически закроет связанный с ним источник данных ... или я не прав?

Спасибо

Ответы [ 4 ]

3 голосов
/ 17 мая 2010

Вы должны закрыть свой ридер вместо закрытия соединения. Посмотрите здесь: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.close.aspx

3 голосов
/ 17 мая 2010

Лучше всего выполнять такие операции следующим образом:

using(SqlConnection connection = new SqlConnection(connStr)) {
    connection.Open();

    SqlCommand command = new SqlCommand(connection, "SELECT...");
    SqlDataReader reader = command.ExecuteReader();
    // Fill your container objects with data
}

, используя оператор:

Определяет область, вне которой объект или объекты будут расположены.

Таким образом, вы можете быть уверены, что ваши переменные connection, command и reader будут закрыты и соответственно расположены при выходе из с использованием блока .

0 голосов
/ 18 мая 2010

Я не совсем уверен, но я всегда использую блок try-catch-finally для действий с БД:

using (SqlConnection cnn = new SqlConnection(ConnectionString))
{
    using (SqlCommand cmmnd = new SqlCommand("SELECT Date();", cnn))
    {
        try
        {
            cnn.Open();
            using (SqlDataReader rdr = cmmnd.ExecuteReader())
            {
                if (rdr.Read()) { result = rdr[0].ToString(); }
            }
        }
        catch (Exception ex) { LogException(ex); }
        finally { cnn.Close(); }
    }
}
0 голосов
/ 17 мая 2010

Если вы не закроете ни средство чтения данных, ни соединение, сборщик мусора сделает это за вас. С другой стороны, это, вероятно, повлияет на производительность вашего приложения.

...