Несколько Form и подключение к базе данных

100
06 февраля 2021, 05:40

В программе несколько форм и каждой так или иначе нужна БД (через класс посредник) для наполнения или записи полученных данных.

Вопрос в том, как организовать работу с БД. В смысле подключения. Каждый раз для команды делать новое подключение. Держать один экземпляр в рамках класса посредника. Или иметь только одно соединение на все приложение и обращаться к БД через него.

Сейчас у меня третий вариант. Но выходит запутанная штука. Будто создаешь еще одну надстройку над OleDbConnection. По сути, с теми же методами. Только возвращающими результаты от оригинального OleDbConnection.

UPDATA:

Нашел следующую вещь (на msdn)

Поставщик данных .NET Framework для OLE DB автоматически создает пулы соединений, используя пулы сеанса OLE DB.

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

Answer 1

Вот что выяснил.

чтобы осуществлять связь между базой данных и приложением на C# необходим посредник. И именно таким посредником является технология ADO.NET (источник)

в ADO.NET используется механизм пула подключений (источник)

ADO.NET работает с OleDb (источник)

И наконец, по примеру источника проделал массовое открытие-закрытие в цикле и делал снимок памяти. Как и утверждает цитата в UPDATE моего вопроса - пул создается автоматически. Как только вы изменяете строку подключения - создается новый пул. Подробнее по источнику из первого предложения.

       static void Main(string[] args)
       {
            string connectionString = 
                   "Provider = Microsoft.ACE.OLEDB.12.0; Data Source=Название.accdb";
            for (int i = 1; i < 6; i++)
            {
                using (OleDbConnection connection = new 
                       OleDbConnection(connectionString))
                {
                    connection.Open();
                    Console.WriteLine(String.Format("{0}) {1}", i, connection.State));
                }
                Console.Write("Pause");
                Console.ReadLine();
            }
            using (OleDbConnection connection = 
                   new OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0; Data Source=ДругоеНазвание.accdb"))
            {
                connection.Open();
                Console.WriteLine(String.Format("{0}) {1}", 
                        "Другая строка подключения:", connection.State()));
            }
            Console.Read();
        }

Согласно коду, после каждого закрытия (благодаря using) была пауза. В которую я делал снимок памяти. Пока строка подключения не меняется, используются те же ресурсы. Как только поменяли строку подключения, резкий скачек (создалось новое подключение и новый пул).

Поэтому, буду создавать новое подключение для каждой команды. Поскольку моя строка подключения не изменится в течении сеанса программы. Для извлечения строки подключения использую параметры уровня приложения (источник).

READ ALSO
OnCollisionEnter2D для наследника

OnCollisionEnter2D для наследника

У меня есть абстрактный класс:

95
Входная строка имела неверный формат в Int32.Parse

Входная строка имела неверный формат в Int32.Parse

Столкнулся со странной ошибкойЕсть кнопка button, и событие Click для неё

131
Создать XML для Excel с помощью LINQ to XML

Создать XML для Excel с помощью LINQ to XML

Пытаюсь построить XML для Excel такого вида:

118