Я прочитал несколько статей об операторе using, чтобы попытаться понять, когда его следует использовать. Похоже, что большинство людей считают, что его следует использовать как можно дольше, поскольку это гарантирует утилизацию неиспользованных предметов.
Проблема в том, что все примеры всегда показывают что-то вроде этого:
using (SqlCommand scmFetch = new SqlCommand())
{
// code
}
Это имеет смысл, но это такой маленький кусочек кода. Что я должен делать при выполнении запроса к базе данных? Каковы все шаги? Будет ли это выглядеть примерно так:
string sQuery = @"
SELECT [ID], [Description]
FROM [Zones]
ORDER BY [Description] ";
DataTable dtZones = new DataTable("Zones");
using (SqlConnection scnFetchZones = new SqlConnection())
{
scnFetchZones.ConnectionString = __sConnectionString;
scnFetchZones.Open();
using (SqlCommand scmdFetchZones = new SqlCommand())
{
scmdFetchZones.Connection = scnFetchZones;
scmdFetchZones.CommandText = sQuery;
using (SqlDataAdapter sdaFetch = new SqlDataAdapter())
{
sdaFetch.SelectCommand = scmdFetchZones;
sdaFetch.Fill(dtZones);
}
}
if (scnFetchZones.State == ConnectionState.Open)
scnFetchZones.Close();
}
Что я хочу знать:
• Можно ли вкладывать 4, 5, 10 с помощью операторов, чтобы гарантировать удаление всех объектов?
• В какой момент я делаю что-то не так и должен ли я рассмотреть пересмотр?
• Если требуется ревизия из-за слишком большого количества вложенных операторов операторов, каковы мои варианты?
У вас может сложиться внушительная иерархия, но ваш код должен быть достаточно эффективным, верно? Или вы должны поместить, например, только объект SqlDataAdapter
в оператор using, и это так или иначе обеспечит удаление всех других объектов?
Thanx.