Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C# - Visual Studio 2008 - błąd w połączeniu z bazą danych

danon198901 01 Lis 2013 21:07 2523 8
  • #1 01 Lis 2013 21:07
    danon198901
    Poziom 11  

    Witam,

    mam do wykonania projekt, zostawiłem sobie to na ostatnią chwilę i niestety narzędzia odmawiają posłuszeństwa, albo ja nie potrafię tego "ogarnąć".

    Otóż posiadam pakiet VS2008. Dodatkowo zainstalowałem sobie SQL Server 2008 R2 + SQL Server Management Studio 2008 R2. Przy próbie połączenia z bazą danych dostawałem błędy za każdym razem. Odinstalowałem wszystko i instalowałem na nowo zarówno x86 jak i x64. Wszystko kończyło się tym samym, a mianowicie błędami, których screeny przedstawiam poniżej:
    1. okno główne po uruchomieniu Management Studio (wybrałem local)
    C# - Visual Studio 2008 - błąd w połączeniu z bazą danych
    2. po zatwierdzeniu poprzedniego okna (wybór local)
    C# - Visual Studio 2008 - błąd w połączeniu z bazą danych
    3. jak próbowałem na local server group dać "task -> registered servers"
    C# - Visual Studio 2008 - błąd w połączeniu z bazą danych
    4. coś się bawiłem i podobny błąd wyskoczył
    C# - Visual Studio 2008 - błąd w połączeniu z bazą danych
    5. Okno SQL Server Config Manager (SQL Server Service wskazuje na jakiś błąd)
    C# - Visual Studio 2008 - błąd w połączeniu z bazą danych





    Dodam jeszcze, że w services.msc mam uruchomioną usługę SQL Server.
    'Pogooglałem' troszeczkę i udało mi się połączyć, gdy zamiast w oknie wybrać (local) (patrz zamieszczony screen pierwszy), wpisałem .\SQLEXPRESS.
    Zrobiłem sobie własną bazę danych, własne tabele itp.

    Moje pytanie brzmi: czy to 'wygooglane' rozwiązanie jest ok? Czy po utworzeniu bazy fizycznie ona istnieje i mam do niej dostęp, bo nie jestem do końca pewien...
    Poprzez pisany przeze mnie program muszę dostać się do bazy i zapisywać w niej dane. Przedstawię poniżej fragment kodu:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Niestety program wysypuje mi za każdym razem błąd, iż nie można połączyć się z bazą danych.
    Wystąpił błąd związany z siecią lub wystąpieniem podczas ustanawiania połączenia z serwerem programu SQL Server. Nie można odnaleźć serwera lub jest on niedostępny. Sprawdź, czy nazwa wystąpienia jest poprawna i czy konfiguracja serwera programu SQL Server zezwala na połączenia zdalne. (provider: Dostawca nazwanych potoków, error: 40 - Nie można otworzyć połączenia z programem SQL Server)

    Zamiast Data Source=(local) wpisywałem:
    - Data Source=SQLEXPRESS
    - Data Source=.\SQLEXPRESS
    - Data Source=(SQLEXPRESS)

    Co robię źle? Będę wdzięczy za każdą możliwą odpowiedź, gdyż chciałbym ruszyć z kopyta z projektem, a dziś po całym dniu walki z SQL Serverem okazało się, że była to walka z wiatrakami :cry:

    Dodano po 1 [godziny] 47 [minuty]:

    ok problem rozwiązany. Rozwiązaniem było dopisanie dodatkowego '\':
    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Problem mam niestety z zapisem, bo nic kompletnie do bazy mi nie zapisuje. Dodałem sobie try/catch i za każdym przetworzeniem w pętli dostaję informację, że nastąpił błąd w zapisie do bazy:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Any idea :?:

    0 8
  • Pomocny post
    #2 01 Lis 2013 23:03
    marcinj12
    Poziom 40  

    Wyświetl sobie treść tego wyjątku, to się czegoś więcej dowiesz...

    0
  • Pomocny post
    #3 01 Lis 2013 23:18
    cepelia
    Poziom 20  

    po pierwsze spróbuj wykonać to zapytanie w sqlmenagerze i zobacz dlaczego nie możesz zapisać
    po drugie używaj parametrów dla zmiennych które chcesz umieścić w zapytaniu !!

    a po za tym po kolei...
    -definiujesz połączenie (to zrobiłeś prawidłowo choć można użyć configuration menagera żeby uniknąć otwartego tekstu w zmiennej)
    -definiujesz polecenie..
    cmd = New SqlCommand
    cmd.CommandType = CommandType.Text
    cmd.CommandText = "tutaj twój insert"
    cmd.Connection = conn
    -definiujesz parametry...
    searchParam = New SqlParameter("@typ", typ)
    cmd.Parameters.Add(searchParam)

    a w insercie nie wstawiasz zmiennej tylko parametr czyli gdybyś chciał wstawić parametr @typ to insert powinien wyglądać mniej więcej tak...

    "insert into ZoneAlarmLog(Zdarzenie, Data, Czas, Source, Destination, Transport) values(@typ,'" +data+ "','" +czas+ "','" +adresWe+ "','" +adresWy+ "','" +protokol+ "');";

    0
  • #4 01 Lis 2013 23:42
    danon198901
    Poziom 11  

    marcinj12 napisał:
    Wyświetl sobie treść tego wyjątku, to się czegoś więcej dowiesz...


    tak też zrobiłem i problem znalazłem (przypisanie stringa do datetime).
    Jeszcze troszkę pracy przede mną, więc wątek pozostawiam otwarty na wypadek, gdyby pojawiły się jeszcze pytania:)
    Dzięki za odpowiedzi;)

    0
  • #5 03 Lis 2013 18:04
    danon198901
    Poziom 11  

    Mam takie pytanko, otóż zrobiłem sobie jakąś prostą, przykładową tabelę. Potrzebuję wyciągnąć unikatowe wartości z kolumny i później w programie je wykorzystać. Dane te wyciągam:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    Na bazie mojej tablicy dostaję zwrot kilku wartości. Teraz chciałbym je jakoś przechować programowo. Próbowałem zapisać je do stringa:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    Jednak metoda executeScalar zwraca tylko pierwszy wynik i cała reszta jest pomijana. Próbowałem zbudować tablicę stringów, ale niestety wyrzuca mi błąd (can't convert string to string[]):(

    Jak mógłbym zapisać te wyciągnięte dane do zmiennej? Obojętnie jest mi to czy to będzie tablica (będę działał na indeksach) czy też sam string (a później wyciągnę sobie to co mnie będzie interesowało), ważne jest natomiast jak mogę zapisać sam wynik powyższego zapytania SQL:)

    0
  • Pomocny post
    #6 03 Lis 2013 18:55
    Defice
    Poziom 25  

    Dawno już się z tym nie bawiłem, ale wystarczy wychwycić wyjątek. Połączenia do bazy robisz w try {} a następnie do catch zastosuj taką składnie:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Wówczas na ekran wyrzuci Ci MessageBox, ja przynajmniej tak robię, wiem chociaż co jest źle od razu.

    0
  • #7 03 Lis 2013 19:02
    danon198901
    Poziom 11  

    dzięki za sugestię;)
    Jednak nadal nie wiem jak zapisać wynik działania zapytania ""select distinct Zdarzenie from Log;" do zmiennej/tablicy etc.

    0
  • Pomocny post
    #8 03 Lis 2013 19:15
    Defice
    Poziom 25  

    A do czego będziesz tych danych używać? Nie prościej wrzucić je do DataTable? Poźniej możesz wyświetlać je wedle potrzeb np. DataGridView bądź w RichTextBoxie.

    Tu mam przykład z mojego niedawnego projektu, co prawda w MySQL, ale różnice są niewielkie:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Kod powinien być czytelny, wybacz ale nie mam siły przerabiać go na Twoje potrzeby. Funkcja dodaj w tym momencie, może być zastąpiona wybraną przez Ciebie, najważniejsze jest tu wyłuskanie id i double, potem robisz z tym co chcesz. Oczywiście takie zmienne możesz już wedle uznania łączyć w stringi itp.

    0
  • #9 03 Lis 2013 21:38
    danon198901
    Poziom 11  

    OK. Wstawiłem dataGridView, a w niego ładuję tabelkę z zapytania SQL po kliknięciu buttona:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod



    Powiedzmy, że tabelka ta wygląda następująco:
    A | 14
    B | 23
    C | 44
    D | 6

    Moim zadaniem jest zbudować wykres na bazie MS Chart. Wykres wiem jak zrobić, ale w series muszę wcisnąć info o zdarzeniach (A, B, C, D) i ilość ich wystąpień - a tym samym muszę pobrać jakoś te informacje z tej tabelki.
    Normalnie zrobiłbym to:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    itd. A więc chciałbym zczytać kolumne "Zdarzenia" do tablicy X oraz "IloscWystapien" do tablicy Y, a następnie kolejno w pętli wyświetlić na wykresie:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Mam nadzieję, że jasno to opisałem. Być może da radę to wykonać inaczej niż na tablicach? A jeśli można dane zczytać do tablicy to w jaki sposób?:)

    OK, już rozwiązałem problem - człowiek się wyspał i od razu lepiej:)

    0