SQL соединение с базой данных повторяется - PullRequest
1 голос
/ 19 марта 2010

Хорошо, теперь я использую базу данных SQL, чтобы получить значения из разных таблиц ... поэтому я устанавливаю соединение и получаю такие значения:

DataTable dt = new DataTable();
SqlConnection connection = new SqlConnection();
connection.ConnectionString = ConfigurationManager.ConnectionStrings["XYZConnectionString"].ConnectionString;
connection.Open();
SqlCommand sqlCmd = new SqlCommand("SELECT * FROM Machines", connection);
SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);

sqlCmd.Parameters.AddWithValue("@node", node);
sqlDa.Fill(dt);
connection.Close();

так что это один запрос на странице, и я вызываю много других запросов на странице.

Так нужно ли мне открывать и закрывать соединение каждый раз ... ???

также, если не эта часть является общей для всех:

DataTable dt = new DataTable();
SqlConnection connection = new SqlConnection();
connection.ConnectionString = ConfigurationManager.ConnectionStrings["XYZConnectionString"].ConnectionString;
connection.Open();

Могу ли я поставить его в одну функцию и вызвать вместо этого ... код будет выглядеть чище ... Я пытался сделать это, но я получаю ошибки, как:

Соединение не существует в текущем контексте.

есть предложения ???

спасибо

Ответы [ 4 ]

6 голосов
/ 19 марта 2010
  1. Вы определенно можете поделиться кодом "открытого подключения", нет причин дублировать его.
  2. С поставщиком SQL Server для ASP.NET очень мало накладных расходов при «закрытии» соединения каждый раз. Он просто возвращает соединение в пул соединений вашего процесса (см. здесь ), поэтому открытие следующего соединения потребует очень мало накладных расходов. Я считаю хорошей практикой закрывать соединение после каждой операции
5 голосов
/ 19 марта 2010

Я использую "использование". Вы можете включить столько запросов, сколько захотите. После завершения он очистится для вас.

using (SqlConnection cn = new SqlConnection(connectionString))
{
    using (SqlCommand cm = new SqlCommand(commandString, cn))
    {
        cn.Open();
        cm.ExecuteNonQuery();
    }
}
1 голос
/ 19 марта 2010

Нет, вам не нужно открывать и закрывать соединение каждый раз, пока вы используете одну и ту же базу данных. То, что вам нужно изменить, это

sqlCommand's queryString every time.

Как и то, что сказал @durilai, [using] полезно. Using на самом деле имеет больше функций, чем это, но по сути он помещает блок try / catch вокруг вашего кода и вызывает dispose для закрытия соединения в этом случае.

Все, что требует открытия / закрытия, может быть использовано с помощью, например, такие как пишущие тексты или другие объекты.

1 голос
/ 19 марта 2010

Как правило, да, вы делаете отдельные подключения для нескольких наборов строк.

Если вы можете использовать объединения для создания единого значимого набора строк, это, как правило, хорошо делать на стороне сервера, а не на стороне клиента.

Возможно, вы захотите взглянуть на создание нескольких соединений и использование асинхронных функций, чтобы ставить в очередь все ваши запросы одновременно, а не последовательно - посмотрите на эту статью .

...