ADO.NET + C# : stałe połączenie z bazą danych.

1

Witam.
Udało mi się napisać dobrze działająca aplikację c# która łączy się z zewnętrzną bazą danych. Jednak zastanawia mnie jedna rzecz.
Jeśli mam 4 buttony do każdej operacji bazodanowej (Dodaj, usuń, edytuj, rzutój wiersze/tabele/kolumny) to za każdym razem w buttonie odwołuję się do obiektu conn klasy npgsqlconnection i tworzę łańcuch połączeniowy

 Npgsqlconnection conn = new Npgsqlconnection(polacz);

gdzie

polacz

jest zmienną typu string która zawiera informacje o logowaniu się do bazy.

Z bazą łączę się i rozłączam za każdym razem, gdy wywołam zdarzenie za pomocą akcji button.

Na tej stronie http://www.microsoft.com/poland/developer/net/programowanie/dostep_do_baz.mspx#EOE
W solucji bibliotek ADO.NET wyczytałem jednak, że:

Nie ma potrzeby ciągłego otwierania i zamykania połączenia z bazą danych za każdym razem, gdy chcemy wykonać jakąś operację w bazie danych — jedno połączenie może być wykorzystywane przez wiele operacji.

Powyższe zagadnienie interesuje mnie ze względu na to, że będe mógł przy wyszukiwaniu informacji z bazy danych , odwoływać się bezpośrednio do bazy, bez konieczności używania za kazdym razem obiektów np. typu dataset .

Jednak nie mam żadnego pomysłu jak tego dokonać, aby podczas działania programu połaczenie z bazą danych trwało cały czas, niezależnie od tego w jakiej formatce siedzę. Wiem tylko tyle, że chciałbym jedno połaczenie z bazą danych wykorzstywać w kilku formach i że jedna formatka będzie miała panel logowania z której pobiorę atrybuty do parametrów połączenia z bazą danych.

Jedyne co mi na myśl przychodzi to utworzenie obiektu instancji do klasy połączenia w klasie statycznej

 
static class Połączenie
{
Npgsqlconnection conn = new Npgsqlconnection(polacz);

void jakasmetoda();
}

jednak nie wiem, czy dzięki temu rozwiązaniu , będe miał zachowane połączenie do bazy niezaleznie od tego, jakiej formatki będe używać.

1

Dokładnie tak, będzie działać. Taka klasa statyczna nie bedzie zależna od formatek, ile byś ich nie utworzył. Poza tym, skorzystaj z wzorca singleton - w takich przypadkach jest to bardzo pożyteczne narzędzie.

0

edit: Trochę doczytałem informacji o singletonie i chyba zrozumiałem jego ideę. 4 tygodnie temu spotkałem się z tym zagadnieniem i była to dla mnie czarna magia, ale dzisiaj tą wiedzę łyknąłem bez problemu ;)

0

W jaki sposób mogę wywołać destruktor dla klasy sigleton, który tworzy połączenie z bazą ?
Potrzebuję go (destruktor) do usunięcia obiektu który ma zapisane dane połączenia z baza danych, żebym mógł dokonać przelogowania na inne konto. (Wpisac dane logowania dla innego użytkownika).

1

Napisz sobie metodę do wylogowania albo przelogowania i jej użyj.

Destruktor... co za pomysł... C++ krzywdzi ludzi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1