Рейтинг:
9
lukeer
Нет. Просто SqlConnection connection
будет утилизирован.
Учитывая Объект sqlconnection правильно, любые неуправляемые ресурсы, которые он занимает, будут доступны после закрывающей скобки. Но что-нибудь за пределами Объект sqlconnection тип-это ваше дело, чтобы заботиться о нем.
Priya-Kiko
Спасибо за ответ. Это означает, что "команда" должна быть command.dispose() позже ?
Michael_Davies
Вы можете иметь более одной переменной в using, добавление команды в using избавит вас от нее.
использование (sqlconnection connection = new SqlConnection(
connectionString),
Команда SqlCommand = new SqlCommand(queryString, connection))
Priya-Kiko
Спасибо за ваш ответ.
В такой ситуации, когда есть несколько операторов рядом со следующим, должен ли я использовать его таким образом и как насчет области действия таблиц данных. пожалуйста, помогите уточнить. Спасибо.
{
mconn.Открыть();
using (SqlCommand msqlcmd = new SqlCommand ("select * from bmast", mconn),
Класс sqldatareader msqldat = msqlcmd.Метода executereader(),
DataTable dtbmast = новый DataTable(),
dtbmast. Load(msqldat),
msqldat.Закрывать())
using (SqlCommand msqlcmd = new SqlCommand ("select * from kmast", mconn),
Класс sqldatareader msqldat = msqlcmd.Метода executereader(),
DataTable dtkmast = новый DataTable(),
dtkmast. Load(msqldat),
msqldat.Закрывать())
}
Michael_Davies
Не совсем уверен, что вы имеете в виду, однако зачем избавляться от объекта, когда вы можете повторно использовать его, и почему вы помещаете операторы выполнения в оператор using, очень трудно читать, легко ошибаться, если он работает.
Какой смысл загружать таблицу, которая затем утилизируется почти сразу же после завершения использования?
Если msqldat и msqlcmd были в одном операторе Using, вы можете повторно использовать их, экономя время, затраченное на утилизацию, а затем инициализировать другой экземпляр того же самого. Для читателя в их примерах MS просто закрывает читатель и не утилизирует его.
https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.close(v=против 110). aspx
{
mconn.Открыть();
using (SqlCommand msqlcmd = new SqlCommand ("select * from bmast", mconn),
DataTable dtbmast = новый DataTable(),
DataTable dtkmast = новый DataTable())
{
Класс sqldatareader msqldat = msqlcmd.метода executereader();
dtbmast. Load(msqldat);
msqldat.Закрывать();
msqlcmd. commandtext = " select * from kmast";
msqldat = msqlcmd.Метода executereader();
dtkmast. Load(msqldat);
msqldat.Закрывать();
}
// Теперь объекты располагаются вместе с данными в таблицах данных...
mconn.рядом();
}
lukeer
Я не знал, что синтаксис запятой работает, и никогда не пробовал.
Спасибо.
Priya-Kiko
Спасибо,
Так может ли мой код быть таким :
DataTable dtbmast = новый DataTable(),
DataTable dtkmast = новый DataTable())
...
...
...
private void somefunction()
{
mconn.Открыть();
using (SqlCommand msqlcmd = new SqlCommand ("select * from bmast", mconn)
{
использование (SqlDataReader msqldat = msqlcmd.Метода executereader())
{
dtbmast. Load(msqldat);
msqldat.Закрывать();
msqlcmd. commandtext = " select * from kmast";
msqldat = msqlcmd.ExecuteReader (); / / здесь я получаю ошибку не могу назначить msqldat, потому что она находится в операторе using
dtkmast. Load(msqldat);
msqldat.Закрывать();
}
// Здесь msqldat удален
}
// Здесь msqlcmd удален
mconn.рядом();
}
// можно использовать dtkmast и dtbmast здесь
Правильно ли я понимаю это, и если это внутри, попробуйте поймать, как это работает. Пожалуйста помочь. Извините за беспокойство снова и снова.