C # Data Connections Best Practice?

Ok, więc jest to jeden z tych upartych tematów, ale na podstawie twojej wiedzy, opinii i aktualnej praktyki, jaki jest najlepszy sposób na ustawienie następującego scenariusza?

Buduję obszerną aplikację do wprowadzania danych i mam na myśli, że mam tylko podstawowe ustawienia, które obejmują około 15-25% całego programu i mam około 15 formularzy, które są częściowo skonfigurowane. (Nadal potrzebują pracy) Używam SQL Compact 4.0 jako bazy danych zaplecza, nie potrzebuję bardziej rozbudowanej bazy danych, ponieważ nie przechowuję wartości danych MMO i na razie jest to tylko aplikacja lokalna .

Chciałbym być w stanie ustawić go tak, aby był wyświetlany jako pojedyncze okno, które zmienia się na różne strony w oparciu o system menu, ale nie mogę znaleźć dobrego samouczka na temat tego, jak można to osiągnąć, więc jeśli ktokolwiek wie, proszę, oświeć mnie.

Jednak scenariusz, o którym mowa, dotyczy sposobu łączenia się z bazami danych. Korzystam z 2 baz danych SQLCE, jednej przechowującej dane stałe oparte na usługach i personelu, a drugiej przechowującej stale zmieniające się dane lub nowe dane wprowadzane na podstawie pierwszej bazy danych. Widziałem wiele różnych metod tego ustawienia i obecnie używam takiego, w którym mam BaseForm, z którego dziedziczą wszystkie inne formy. W BaseFormie mam metody i zmienne, które są wspólne dla wielu formularzy, minimalizując ilość powtarzanego kodu.

Obejmuje to ciągi połączeń do obu baz danych i 2 metody, które otwierają połączenie z jednym z nich. Tak jak:

internal SqlCeConnection dataConn = new SqlCeConnection(@"Data Source = |DataDirectory|\opi_data.sdf");
internal SqlCeConnection logConn = new SqlCeConnection(@"Data Source = |DataDirectory|\opi_logs.sdf");
internal SqlCeCommand command;

internal void openDataConnection() // Opens a connection to the data tables 
        {
            try
            {
                if(dataConn.State == ConnectionState.Closed)
                    dataConn.Open();
            }
            catch(SqlCeException ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        internal void openLogConnection() // Opens a connection to the log tables
        {
            try
            {
                if(logConn.State == ConnectionState.Closed)
                    logConn.Open();
            }
            catch (SqlCeException ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

Wtedy, gdy potrzebuję otwartego połączenia, po prostu wywołuję metodę otwartego połączenia, która odpowiada bazie danych, do której potrzebuję dostępu, a następnie zamykam ją w instrukcji finally. W ten sposób połączenie nigdy nie jest otwarte przez bardzo długi czas, tylko kiedy jest potrzebne. Oczywiście oznacza to, że istnieje wiele wywołań metod otwartego połączenia. Czy jest to najlepszy sposób na wdrożenie tego rodzaju scenariusza, czy są lepsze sposoby?

Czy lepiej jest po prostu otworzyć połączenie, gdy tylko formularz zostanie załadowany, a następnie zamknąć, gdy formularz zostanie zamknięty? Mam przypadki, w których wiele formularzy jest otwartych jednocześnie, a każdy z nich prawdopodobnie potrzebowałby otwartego połączenia z bazami danych, więc jeśli je zamkniesz, pozostałe zostaną wkręcone? Czy powinienem otworzyć połączenie z obydwoma bazami danych po uruchomieniu aplikacji? Wszelkie dane będą mile widziane. Dzięki.

questionAnswers(2)

yourAnswerToTheQuestion