Problem z połączeniem przez ODBC

0

Witam

Próbuję się połączyć przez ODBC z bazą danych. Kod odpowiedzialny na połączenie z bazą:

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Odbc;


namespace WindowsFormsApplication1
{

    public class BazaDanych
    {
        public static string centrala_dsn = "DSN=CENTRALA";
        public static OdbcConnection Centrala1 = new OdbcConnection(centrala_dsn);
        Centrala1.Open();
    }
}

Do linii Centrala1.Open otrzymuję błąd - Error 2 'WindowsFormsApplication1.BazaDanych.Centrala1' is a 'field' but is used like a 'type'.

Czy ktoś z kolegów może pomóc początkującemu "programiście" ??

0

Centrala1.Open(); do konstruktora daj.

0

do konstruktora, albo do jakieś funkcji, bo chcesz w przestrzeni klasy uruchomić metodę obiektu Centrala1, a możesz to zrobić w funkcji albo w konstruktorze.

0

Koledzy DDXD i bpit2 - bardzo Wam dziękuję za pomoc - w konstruktorze działa. Mój post stąd że we wszystkich przykładach jakie znalazłem dotychczas w sieci nie było "po drodze" konstruktora - kod był dokładnie taki jak w moim przypadku. W tym miejscu tylko definiuję połączenie z bazą natomiast samo połączenie i zapytania chcę wykonywać w innym miejscu programu.

1

Otwieraj połączenie do bazy tylko tam gdzie jest Ci to potrzebne w konstruktorze to marny pomysł rób tak:

 using (OdbcConnection Centrala1 = new OdbcConnection(centrala_dsn))  
    {  
        Centrala1.Open();
        // Zapytanie i inne cuda...
        Centrala1.Close();
    }

kod powyżej jest konwertowany przez .NET CLR do:

{ 
    OdbcConnection Centrala1 = new OdbcConnection(centrala_dsn)
    try
    {
         Centrala1.Open();
        // Zapytanie i inne cuda...
        Centrala1.Close();
    }
    finally
    {
        if (Centrala1 != null)
            ((IDisposable)Centrala1).Dispose();
    }
}
0

No właśnie problem polegał na tym że jak chciałem połączenie nawiązać "tam gdzie jest potrzebne" to pojawiał się komunikat i nazwa "Centrala1" nie była odnajdywana. Stworzyłem konstruktor po czym go usunąłem i teraz mogę w dowolnym miejscu kodu nawiązać połączenie przez zwykłe
BazaDanych.Centrala1.Open();

Ktoś z kolegów ma pomysł skąd ta nagła zmiana skoro konstruktor został usunięty po założeniu ??

0

C.U.D.A. :)

public static OdbcConnection Centrala1 = new OdbcConnection(centrala_dsn); 

jest publicznym polem klasy i ZAWSZE było widoczne na poziomie klasy i w klasach dziedziczących po niej. Dostawałeś błąd gdy chciałeś w polu wywołać Open(). Metodę Open() jak podali ci koledzy używa się w sekcji przeznaczonej dla metod, a użycie using jest najlepsze , bo po zamknięciu połączenia .net wrzuci to co już nie potrzebne do śmieciarki.

0

No właśnie było tak że cały czas był publicznym polem klasy, chciałem wywołać Open() po kliknięciu w button i gdy wprowadzałem wywołanie do BazaDanych.Centrala1 wtedy Centrala1 w ogóle nie było "dostępne". Teraz w tym samym miejscu jest :)
Ale tak jak sugerują koledzy z większym doświadczeniem będę stosował "using".
Ja jestem początkujący ale małymi kroczkami do celu :)
Dzięki wszystkim za pomoc w temacie

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