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 2

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();
    }
}

Это зависит от того, что вы действительно имеете в виду/намереваетесь сделать. Если вы имеете в видупакетирование набора команд? Тогда да,

Hth.