ConnectionString - pamiętany z poprzedniej instalacji Windows'a (winForms)

0

Aplikację pisałem lekko ponad rok temu, działała tak jak powinna jak przeinstalowałem Windows i m.in. SQL Server nie mogę zmienić ConnectingStringa z którego korzysta aplikacja tzn.

w warstwie dostępu do danych mam:

public static class DBData
    {
        private static string pracowyUniwersalny = "...";
        private static string domowyLaptopowy = @"...";
        private static string domowyStacjonarny = @"...";              
        private static string serverSOMEE = "...";

        private static string conn = domowyStacjonarny; 

        public static string ConnectionString
        {
            get
            {
                return conn;
            }
        }
    } 

I wcześniej zależnie od tego gdzie aktualnie pracowałem nad programem, przypisywałem do conn ConnectionString do bazy na lokalnym komputerze.

Teraz to nie dziala. Przeinstalowałem Windows, zainstalowałem nową instację SQLSerwer, podłaczyłem do niej baze danych z kopii z archiwum i przy debugowaniu przy pierwszym wywolaniu

 DBData.ConnectionString

podwietla mi się tam wartość connection stringa z poprzedniej instalacji windowsa/sql server'a.

Kiedys ktoś na forum tłumaczył o róznicach miedzy Build Solution, Rebuild Solution i to też próbowałem bo myslałem ze ten stary connstring jest gdzies w skomilowanych wczesniej plikach - ale to nie działa. Pamietam jeszze ze był trzeci sposób na Rebuild Solution gdzie najpierw kasowane było wszystko wcześniejsze i na nowo kompilowane aktualne ale nie pamietam jaki to był skrót.

Czy ktoś pomoże, w czym problem ewentualnie jaki to był skrót?
Wczesniej pisałem na VS 2010 teraz uzywam VS2013 community

1

Twój problem polega na tym, że masz connection stringi wpisane na stałe. Poza tym to są jakieś czary. Zadaj sobie pytanie, co się dzieje w momencie tworzenia klasy DBData?

Masz różne pola, które przyjmują różne wartości. W tym pole domowyStacjonarny, które przyjmuje jakąś z góry ustaloną, wpisaną na STAŁE wartość. Masz też pole conn, które przyjmuje wartość taką, jaką ma w tym momencie domowyStacjonarny. I jeśli kod jest faktycznie wklejony z projektu (a nie zmieniłeś sobie tutaj np. kolejności pola conn), to wszystko powinno być dobrze i pole conn powinno przyjąć wartość pola domowyStacjonarny.

Teraz, nie przez przypadek wyżej napisałem słowo "STAŁE" wielkimi literami. Te wszystkie pola powinny być stałymi. To po pierwsze. Po drugie, kod powinien wyglądać tak (w Twoim przypadku):

 
public static class DBData
    {
        const string pracowyUniwersalny = "..."; //nie ma static, bo w C# const jest static. Po prostu jest.
        const string domowyLaptopowy = @"...";
        const string domowyStacjonarny = @"...";              
        const string serverSOMEE = "...";
 
        public static string ConnectionString
        {
            get
            {
                return domowyStacjonarny; //czy co tam sobie chcesz
            }
        }
    } 

Oczywiście ten kod jest zły. ConnectionString powinien być brany z konfiguracji. Czy to z jakiegoś pliku konfiguracyjnego, czy to z rejestru, czy skądś jeszcze indziej. Boisz się, że ktoś może odczytać ten connection string z pliku, czy rejestru i pozna Twoje hasło (albo brak hasła)? No i słusznie, bo taki zapisany connection string powinien być zakodowany.

0

Świetnie, dokładnie rok temu jakoś sobie poradziłem z tym problemem. A teraz równo rok po, mam identyczny.

Miejcie litość i pomińcie sprawę architektury kodu, bo po takim czasie miejscami swojego kodu nie rozumiem a co tu mówić o poprawkach architektury.

Pytanie:
Skąd program "pamięta" stary dawno już nie używany connectionstring skoro w kodzie jawnie przypisuje mu nowy/aktualny (zastosowałem się do rady powyżej i poprawiłem kod jak napisał kolega wyżej.
Mało tego, jeżeli debuguje krok po kroku to ten connection string jest brany w ogóle nie wiadomo skąd bo ustawiony breakpoint na metodzie:

public static string ConnectionString
        {
            get
            {
                return domowyStacjonarny;
            }
        }

nie zatrzymuje się na niej.
A przeczesałem wszystkie referencje do obiektu DBData i connectionstring w każdym miejscu pobierany jest tylko z niego.

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