OK, więc jest to jeden z takich poglądów, ale na podstawie wiedzy, opinii i aktualnej praktyki, jaki jest najlepszy sposób na ustawienie następującego scenariusza?C# Połączenia danych Najlepsza praktyka?
Buduję obszerną aplikację do wprowadzania danych, i przez rozległe 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 backendu, tak naprawdę nie potrzebuję bardziej rozbudowanej bazy danych, ponieważ nie przechowuję wartości danych MMO, a na razie jest to tylko aplikacja lokalna .
Chciałbym móc 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 to będzie osiągnięte, więc jeśli ktokolwiek o tym wie, proszę, oświeć mnie.
Scenariusz, o którym mowa, jest jednak, jak połączyć się z bazami danych. Używam 2 baz danych SQLCE, które przechowują stałe dane oparte na usługach i personelu, a także drugą, która przechowuje stale zmieniające się dane lub nowe dane wprowadzone na podstawie pierwszej bazy danych. Widziałem wiele różnych metod, jak to ustawić i obecnie używam tego, w którym mam BaseForm, z którego dziedziczą wszystkie inne formy. W BaseForm mam metody i zmienne, które są wspólne dla wielu form, co minimalizuje ilość kodu, który jest powtarzany.
Obejmuje to ciągi połączeń obu baz danych i 2 metody, które otwierają połączenie z jednym z nich. Tak:
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);
}
}
Potem ilekroć muszę otwarte połączenie po prostu wywołać metodę otwarte połączenie, które odpowiada bazy muszę dostęp do, a następnie zamknąć ją w finally. W ten sposób połączenie nigdy nie jest otwarte przez bardzo długi czas, gdy jest to potrzebne. Oczywiście oznacza to, że jest wiele połączeń z metodami otwartego połączenia. Więc czy jest to najlepszy sposób na wdrożenie tego rodzaju scenariusza, czy istnieją lepsze sposoby?
Czy lepiej jest po prostu otworzyć połączenie natychmiast po załadowaniu formularza, a następnie zamknąć je po zamknięciu formularza? Mam instancje, w których wiele formularzy jest otwartych na raz, a każdy z nich prawdopodobnie musiałby mieć otwarte połączenie z bazami danych, więc jeśli je zamkniemy, pozostałe zostaną wkręcone w prawo? Czy powinienem otworzyć połączenie z obydwoma bazami danych po uruchomieniu aplikacji? Dowolne wejście będzie docenione. Dzięki.
Zobacz pytanie na Oświadczenie o korzystaniu http://stackoverflow.com/q/212198/1193596 – Amicable