Является ли код System.Data.SqlClient управляемым кодом?
Запросы выполняются в программе C# с использованием пространства имен System.Data.SqlClient управляемого или неуправляемого кода?
Каждый раз, когда соединение закрыто,
(conn.Close()
метод используется) ресурс считает выпущенным, или мы должны распорядиться им, чтобы получить освобождение?
2 ответа
Сам System.Data.SqlClient является управляемым кодом. Однако он построен поверх нескольких других библиотек. Некоторые из них являются управляемым кодом, а некоторые нет.
Сам запрос выполняется базой данных. Таким образом, текст запроса (часть, которая жестко запрограммирована в вашей программе) будет считаться управляемым кодом, но как только команда отправляется в базу данных, она больше не управляется.
После выполнения команды.close само соединение освобождается из приложения.net и возвращается в пул соединений (часть OLEDB, ODBC и / или других подсистем). В этот момент соединение освобождается, а неуправляемая часть освобождается. Утилита выполнит все, что делает и освободит другие управляемые части (строка подключения и т. Д.).
Всегда полезно вызывать метод dispose для любого объекта, который его реализует (или заключать его в блок using, как показано в @IRSOG). В этом случае не особенно опасно просто вызывать close(). Я бы не стал делать это привычкой.
О втором вопросе:
Метод Close откатывает все ожидающие транзакции. Затем он освобождает соединение с пулом соединений или закрывает соединение, если пул соединений отключен.
отредактированный
В следующем примере создается SqlConnection, открывается его, отображаются некоторые его свойства. Соединение автоматически закрывается в конце использования блока.
private static void OpenSqlConnection(string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
Console.WriteLine("ServerVersion: {0}", connection.ServerVersion);
Console.WriteLine("State: {0}", connection.State);
}
}
отредактированный
Вам нужно использовать для каждого объекта, который вы создаете, который реализует IDisposable. Это включает в себя SqlCommand
и SqlConnection
.Если вы используете using
заявление, они будут располагать после использования блока.