Закрыть базовое соединение DataSet явно?

Я использую DataSet для получения данных из Microsoft SQL Server. Я должен явно закрыть соединение (или базовый SqlDataAdapter автоматически закрывает соединение)?

Я всегда использую DataReader (с использованием), но в первый раз с помощью DataSet - вот почему задающийся вопросом о лучшей практике.Заранее спасибо.

5
задан abatishchev 18 December 2010 в 20:45
поделиться

3 ответа

Оператор using очищает неуправляемые ресурсы перед сборкой мусора. Соединение - это неуправляемые ресурсы, поэтому оно должно быть закрытым, даже если вы используете DataSet.

0
ответ дан 15 December 2019 в 00:49
поделиться

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

Вы сказали, что всегда используете устройство чтения данных, но теперь вы используете набор данных. Я предполагаю, что это означает, что вы используете DataAdapter для работы с вашим DataSet . Если это так, и вы используете MSSQL, то SqlDataAdapter откроет и закроет соединение для вас, но, как я уже сказал, мне нравится отслеживать это сам, тем более что вы можете использовать SqlCommand.ExecuteScalar (даже если вы большую часть времени используете DataAdapter ) в какой-то момент, и SqlCommand не будет управлять состоянием вашего соединения за вас.

SqlDataAdapter документ: http://msdn.microsoft.com/en-us/library/zxkb3c3d.aspx

0
ответ дан 15 December 2019 в 00:49
поделиться

Чтобы было понятно, я следую традиционному способу взаимодействия с db для начинающих.

public DataSet GetData()
{
    SqlDataReader reader;
    string connstr = your conn string;
    SqlConnection conn = new SqlConnection(connstr);
    DataTable st = new DataTable();
    DataSet ds = new DataSet();
    try
    {                   
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "Your select query";
        cmd.Connection = conn;
        conn.Open();

        reader = cmd.ExecuteReader();
        dt.Load(reader);
        ds.Tables.Add(dt);
    }
    catch (Exception ex)
    {
        // your exception handling 
    }
    finally
    {
        reader.Close();
        reader.Dispose();
        conn.Close();
        conn.Dispose();
    }    
    return ds;
}
0
ответ дан 15 December 2019 в 00:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: