C# использование одного SqlConnection для нескольких запросов
Как правильно использовать один объект SqlConnection
для нескольких запросов?
SqlConnection connection = new SqlConnection(connString);
static void SqlQuery(SqlConnection conn, string cmdString)
{
using (conn)
{
if (conn.State != ConnectionState.Open)
{
conn.Close();
conn.Open();
}
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = cmdString;
cmd.ExecuteNonQuery();
}
}
Функция SqlQuery
после 1-го вызова бросает System.InvalidOperationException
"свойство ConnectionString не инициализировано"
2 ответа:
Короче говоря, не делайте этого
Создание нового экземпляра класса
SqlConnection
не создает новое сетевое соединение с SQL Server, а арендует существующее соединение (или создает новое). .NET обрабатывает пул физических соединений для вас.Когда вы закончите с вашим соединением (через которое вы можете отправить несколько запросов) просто
Close()
илиDispose()
(или предпочтительно использовать блокusing{}
).Нет необходимости и нет хорошей практики, чтобы кэшировать экземпляры Класс SqlConnection.
Обновить
Это лучший шаблон для вашего метода, вам не нужно беспокоиться о состоянии соединений
static void SqlQuery(string cmdString) { using (var connection = new SqlConnection(connString)) using (var cmd = connection.CreateCommand(cmdString, connection)) { connection.Open(); // query cmd.ExecuteNonQuery(); } }
Это зависит от того, что вы действительно имеете в виду/намереваетесь сделать. Если вы имеете в видупакетирование набора команд? Тогда да,
- возможно, лучшеиспользовать одно соединение . Да, объединение соединений действительно спасает (всех) нас, но если вы действительно думали об этом, что это делает? Да, он повторно использует соединения...
- Выполнение Пакетных Операций
- советы / указатели на
SqlCommand
такжеHth.