biny86 Ответов: 2

Какой из них лучше практиковать в приложении winform?


Я разрабатываю приложение WinForm, которое сильно зависит от базы данных SQL Server. На одной форме приложению требуется несколько раз подключиться к базе данных. Я хочу спросить, что является лучшей практикой и меньшей проблемой производительности между ними - Открытие SqlConnection один раз в событии form_load и закрытие соединения в событии form_closing ОПЕРАЦИОННАЯ Открытие и закрытие соединения во время каждого события (изменение выбора выпадающего списка, нажатие кнопки и т. д)- Пожалуйста, помогите.

Что я уже пробовал:

Открытие и закрытие соединения во время каждого события (изменение выбора выпадающего списка, нажатие кнопки и т. д)

2 Ответов

Рейтинг:
7

OriginalGriff

Открывайте его каждый раз: есть две простые причины.
1) SQL-соединения - это дефицитные ресурсы, и вы не должны "цепляться за них" дольше, чем вам нужно.
2) Некоторые части SQL - такие как DataReader - должны быть закрыты, прежде чем любое другое действие может продолжаться на том же соединении: если вы полагаетесь на один объект соединения, это может действительно испортить ваш код, если вы автоматически не закрываете и не удаляете SqlCommand и подобные объекты, или если вы вызываете метод из цикла DataReader.

Наилучшей практикой является создание соединения (и всех других связанных с SQL объектов) в пределах using блокируйте их таким образом, чтобы они автоматически закрывались и утилизировались, когда выходят за пределы области действия:

using (SqlConnection con = new SqlConnection(strConnect))
    {
    con.Open();
    using (SqlCommand cmd = new SqlCommand("SELECT Id, description FROM myTable", con))
        {
        using (SqlDataReader reader = cmd.ExecuteReader())
            {
            while (reader.Read())
                {
                int id = (int) reader["Id"];
                string desc = (string) reader["description"];
                Console.WriteLine("ID: {0}\n    {1}", id, desc);
                }
            }
        }
    }


biny86

В настоящее время я следую этой практике

Рейтинг:
18

RickZeeland

Поскольку SQL Server использует пулы соединений, при открытии и закрытии соединений практически не происходит снижения производительности, что рекомендуется корпорацией Майкрософт.

Если вы беспокоитесь о производительности вам может быть интересно PostgreSQL, видеть: реляционная база данных[^]
PostgreSQL также гораздо проще распространять и развертывать вместе с вашим приложением.