получение соединения дб через singleton-класс

  • нажмите клавишу CTRL kbd> и выберите ячейки
  • щелкните правой кнопкой мыши по выбранным ячейкам, и вы войдете в специальное подменю для таких действий, где вы можете выбрать Копировать . к сожалению, вы должны установить расширение, которое позволяет вам выполнять такие действия (после нажатия на Скопировать появится это сообщение):

    [110 ]

17
задан Sharique 12 July 2010 в 05:44
поделиться

4 ответа

Ваш синглтон все еще выключен.

Что касается паттерна синглтона, см. Очень хорошее и подробное описание Джона Скита здесь: http: //www.yoda.arachsys .com / csharp / singleton.html

Использование Singleton для объекта SqlConnection - действительно очень плохая идея. Нет никаких причин делать это вообще.

Если вы пытаетесь избежать снижения производительности с помощью «new SqlConnection ()» или «connection.Open ()», имейте в виду, что на самом деле не наблюдается никакого снижения производительности из-за соединения пул происходит за кулисами. Пул соединений обрабатывает открытие / закрытие дорогих соединений. Не объект SqlConnection.

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

Шаблон Singleton используется чаще всего и злоупотребляется шаблон и есть много побочных эффектов синглтона, которые вы можете не знать. Очень хороший разговор об опасностях синглетонов здесь http://www.youtube.com/watch?v=-FRm3VPhseI

29
ответ дан 30 November 2019 в 11:18
поделиться

Если нет другого способа получить соединение с БД, и если этот атрибут не может быть перезаписан, я бы сказал, да. Если это то, что вы делаете, вы, вероятно, зашли слишком далеко. Что делать, если база данных временно отключается и ваше приложение теряет соединение? Затем вам придется перезапустить приложение, чтобы оно могло снова использовать БД.

1
ответ дан 30 November 2019 в 11:18
поделиться

Я не могу ответить на этот вопрос, не видя некоторый код, я думаю. Если вы говорите, что в вашем приложении будет только один экземпляр подключения к БД, это может сработать, если вы можете гарантировать, что ваше приложение будет работать только в одном потоке (или, по крайней мере, все операции, использующие подключение к БД), поскольку вы можете '(насколько я знаю в любом случае) запустить несколько операций в параллель на одном и том же соединении.

Кроме того, если это означает, что ваше приложение будет поддерживать связь между использованиями, я бы посоветовал против этого. Соединения с БД - это ограниченные ресурсы на сервере БД, поэтому вы должны держать их открытыми только тогда, когда они необходимы, а затем закрывать их.

1
ответ дан 30 November 2019 в 11:18
поделиться

Само соединение не удовлетворяет критериям Singleton, потому что вы можете создать несколько экземпляров объекта подключения к базе данных. Одиночный объект по определению может быть создан только один раз.

Вы можете сделать SqlConnection частью Singleton, изменив свой пример следующим образом:

public sealed class SingletonDB
{
   private static readonly SingletonDB instance = new SingletonDB();
   private readonly SqlConnection con =new SqlConnection(ConfigurationManager.ConnectionStrings["mydb"].ConnectionString);

   // Explicit static constructor to tell C# compiler
   // not to mark type as beforefieldinit
   static SingletonDB()
   {
   }

   private SingletonDB()
   {
   }

   public static SingletonDB Instance
   {
       get
       {
          return instance;
       }
   }

   public SqlConnection GetDBConnection()
   {
       return con;
   }

}

Таким образом, SqlConnection используется ваш класс SingletonDB будет иметь один-единственный SqlConnection, поэтому следует шаблону Singleton.

4
ответ дан 30 November 2019 в 11:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: