2014-04-03 2 views
0

У меня есть gridview asp.net, подключенный к моей базе данных sql. При вставке новой записи или обновлении записи im, выполняющей некоторые проверки на сервере, а затем либо обновите/вставьте запись, либо ничего не сделайте. прямо сейчас у меня есть 2 метода CheckArtistExists и CheckSongExists, которые оба используют объект SqlConnection, например.несколько SqlConnections для одной функции: плохая идея?

public bool CheckSongExists(string _title, int _artistId) 
    { 
     int cnt = -1; 
     using (SqlConnection con = new SqlConnection(CS)) 
     { 
      //check if song already is exists in DB 
      SqlCommand cmd = new SqlCommand("Select Count(ID) from tblSong WHERE Title = @newTitle AND ArtistId = @newArtistId;", con); 
      cmd.Parameters.AddWithValue(@"newTitle", _title); 
      cmd.Parameters.AddWithValue(@"newArtistId", _artistId); 
      con.Open(); 
      cnt = (int)cmd.ExecuteScalar(); 
      // if cnt ==1 song exists in DB, of cnt == 0 song doesnt exist 
      if(cnt == 1) 
      { return true; } 
      else 
      { return false; } 
     } 
    } 

Таким образом, для функции обновления в GridView мне нужно установить 3 SqlConnections (при макс) один для проверки художника (если художник оленьей кожи существовать я должен вставить запись в tblArtist первым) то чек если песня существует (только если художник существует), и, наконец, если песня не существует, мне нужно вставить новую запись.

Я знаю, что соединения с базой данных - это ценные ресурсы, поэтому я поместил их в блок использования. Поэтому я не совсем уверен, что его хороший стиль для использования 3 объектов SqlConnection для обновления/вставки. Не могли бы вы рассказать мне, подходит ли мой код или я предпочитаю использовать другой подход для этой проблемы.

спасибо

ответ

1

ADO.NET внутренне управляет основные подключения к СУБД в ADO-NET Connection-Pool:

На практике большинство приложений используют только один или несколько различных конфигурации для соединений. Это означает, что во время выполнения приложения много идентичных соединений будут повторно открываться и закрыт. Чтобы минимизировать затраты на открытие соединений, ADO.NET использует метод оптимизации , называемый пулом соединений.

Пул соединений пулов уменьшает количество новых подключений . Пулёт сохраняет право собственности на физическое соединение . Он управляет соединениями, поддерживая живой набор активных соединений для каждой конкретной конфигурации соединения. Всякий раз, когда пользователь вызывает «Открыть» в соединении, пул ищет доступное соединение в пуле. Если объединенное соединение доступно, оно возвращает его вызывающему абоненту вместо открытия нового соединения. Когда приложение вызывает Close на соединении, пул возвращает его в объединенный набор активных соединений вместо его закрытия. Как только соединение будет возвращено в пул, он будет готов к повторному использованию по следующему открытому вызову .

Поэтому очевидно, что нет причин не создавать, открывать или закрывать соединения, так как на самом деле они не созданы, открыты и закрыты вообще. Это «только» флаг для пула соединений, который должен знать, когда соединение можно использовать повторно. Но это очень важный флаг, потому что, если соединение «используется» (пул соединений предполагает), новое физическое соединение должно быть открыто для СУБД, что очень дорого.

Таким образом, вы не улучшаете производительность, если используете «повторно использовать» соединения, но наоборот.

  • Создание, открытие (в случае соединений), использование, закрытие и размещение там, где они вам понадобятся (f.e.в методе)
  • использовать using-statement распоряжаться и закрыть (в случае подключения) неявным

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

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

Solutions for INSERT OR UPDATE on SQL Server

Смежные вопросы