Лучшие практики для оконных форм и экземпляра SQL-соединения - PullRequest
3 голосов
/ 01 сентября 2011

Что лучше всего подходит для оконных форм C # и экземпляра SQL-соединения.Мне нужно одинаковое соединение SQL во всех оконных формах.Какова лучшая практика внедрения для этого?Где я могу установить соединение SQL?

Я использую Compact Framework 3.5.

Ответы [ 4 ]

9 голосов
/ 01 сентября 2011

Лично я предпочитаю оставлять управление соединениями для пула соединений ADO.NET , и каждый раз, когда я хочу сделать запрос:

using (var conn = new SqlConnection("connection string"))
using (var cmd = conn.CreateCommand())
{
    conn.Open();
    cmd.CommandText = "SELECT id FROM foo;";
    using (var reader = cmd.ExecuteReader())
    {
        while (reader.Read())
        {
            // ...
        }
    }
}

Когда вы вызываете conn.Open(), физическое соединение не открывается, оно берется из пула соединений, а когда использующий блок завершает работу и вызывает .Dispose соединение не закрывается, а возвращается в пул соединений, чтобы быть повторно. Это повышает производительность и избавляет меня от беспокойства о том, куда поместить или хранить эти экземпляры SqlConnection в приложениях.

4 голосов
/ 01 сентября 2011

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

Я бы настоятельно предложил три вещи:

  • Использование внедрения зависимостей для предоставления одного объекта нескольким классам / объектам, которым все это нужно
  • Не вводите фактическое соединение: введите что-то, что может предоставить соединение, или, возможно, просто что-то, что может выполнить запрос для вас.
  • Извлечение кода, обращающегося к базе данных, из кода пользовательского интерфейса, чтобы вы могли тестировать каждый независимо от другого.

Вообще говоря, доступ к базе данных должен быть (с точки зрения вызывающего абонента): «открыть соединение, сделать работу, закрыть соединение, что бы ни случилось» (согласно ответу Дарина). Пусть пул соединений .NET позаботится о физическом подключении к базе данных . То, как вы структурируете свой код, будет зависеть от ваших требований и степени их различий между формами. Во многих случаях вы можете обойтись, просто попросив свой класс доступа к базе данных выполнить для вас запрос с определенным набором параметров и вернуть результаты - в других случаях вам может потребоваться более детальный контроль.

3 голосов
/ 01 сентября 2011

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

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

от DALи пользовательский интерфейс должен состоять только из объектов (сущностей) или для простых проектов DataTables и DataSets.В большинстве случаев третий проект (библиотека классов) находится между ними и называется Business Logic, такой уровень манипулирует данными из DAL и применяет бизнес-логику вашего приложения, возвращая более чистые или подробные результаты в пользовательский интерфейс.

Я использовал этот подход во многих проектах уже около 11 лет.

1 голос
/ 01 сентября 2011

Вы должны создать класс с логикой подключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...