MervDePerv

marzec 17, 2010

C# + ms sql

Opublikowane jako: C# — naza @ 3:42 po południu

Dziś stanąłem przed zadaniem napisania prostego programu do komunikowania się z serwerem MS SQL w C#. Przyznam szczerze, że za dużo o tym języku nie wiem ale skoro to kolejny obiektowy język to why not…. Zainstalowałem M$ Visual C# Express 2008. Pierwsze wrażenia pozytywne. W sumie to przystępne narzędzie i fajny język i warto się z nim zapoznań. Ale wracając do tematu… Do połączenia z bazą danych wykorzystałem ADO.Net. Wygląda to mniej więcej tak:

SqlConnection Conn = new SqlConnection("server=maszyna\\serwerSQL;Trusted_Connection=yes;initial catalog=db");
                try
                {
                    Conn.Open();
                    Console.WriteLine("Połaczono!");
                    Console.ReadLine();
                    Conn.Close();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    Console.ReadLine();
                    return;
                }

Na samym początku definiujemy(wymagany przez ADO) tzw. ConnectionString określający parametry połączenia z bazą danych. Podajemy odpowiednio(przykład z logowaniem za pomocą uwierzytelnienia Windows):

server=maszyna\\serwerSQL - serwer bazy danych, dokładna lokalizacja w sieci
Trusted_Connection=yes - oznacza to uwierzytelnienie Windows
database=db - nazwa bazy danych

W przypadku gdy korzystamy z uwierzytelnienia serwera SQL musimy podać login i hasło. Nasz ConnectionString przybiera postać:

server=;user id=sa;password=p@$w0rd;initial catalog=db

Zamieniamy Trusted_Connection=yes na user id=sa;password=p@$w0rd; gdzie podajemy odpowiednio login i hasło. Ok, mamy połączenie. Teraz jak wydobyć jakieś dane z bazy? Poniżej przykład prostej funkcji wykorzystującej istniejące połączenie. Funkcja będzie zwracać pierwszą kolumnę pierwszego rekordu z zapytania w postaci stringa:

public string select(SqlConnection con, string query)
    {
        if (con.State.ToString() == "Open") //sprawdzamy czy połaczenie jest otwarte
        {
            SqlCommand command = new SqlCommand(query, con); //tworzymy klasę typu SqlCommand podając
                                                            // w destruktorze treść zapytania oraz połączenie
            SqlDataReader reader = command.ExecuteReader();  //deklarujemy SqlDataReader i przypisujemy mu
                                                           //wartości z wykonanego polecenia
            reader.Read(); //odczytujemy z obiektu typu SqlDataReader
            string _return = String.Format("{0}", reader[0]); //pobieramy do stringa wartość z zapytania
            reader.Close(); // zamykamy obiekt typu SqlDataReader
            return _return; //zwracamy stringa
        }
        else return null; // jeśli połączenie nie jest otwarte zwracamy NULL
    }

Gdyby ktoś chciał wyświetlić wszystkie wartości z zapytania wystarczy użyć np pętli while:

while (reader.Read())
        {
            Console.WriteLine(String.Format("{0}",
                reader[0]));
        }

Więcej na temat SqlDataReader na stronach M$.

Leave a Reply

Wspierane przez NETMARK Hosting