Я использую DataSet для получения данных из Microsoft SQL Server. Я должен явно закрыть соединение (или базовый SqlDataAdapter автоматически закрывает соединение)?
Я всегда использую DataReader (с использованием), но в первый раз с помощью DataSet - вот почему задающийся вопросом о лучшей практике.Заранее спасибо.
Оператор using очищает неуправляемые ресурсы перед сборкой мусора. Соединение - это неуправляемые ресурсы, поэтому оно должно быть закрытым, даже если вы используете DataSet.
Я всегда думаю, что отслеживать свои подключения - это хорошая идея, независимо от того, каким способом я подключаюсь к базе данных.
Вы сказали, что всегда используете устройство чтения данных, но теперь вы используете набор данных. Я предполагаю, что это означает, что вы используете DataAdapter
для работы с вашим DataSet
. Если это так, и вы используете MSSQL, то SqlDataAdapter
откроет и закроет соединение для вас, но, как я уже сказал, мне нравится отслеживать это сам, тем более что вы можете использовать SqlCommand.ExecuteScalar
(даже если вы большую часть времени используете DataAdapter
) в какой-то момент, и SqlCommand
не будет управлять состоянием вашего соединения за вас.
SqlDataAdapter
документ:
http://msdn.microsoft.com/en-us/library/zxkb3c3d.aspx
Чтобы было понятно, я следую традиционному способу взаимодействия с 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;
}