C# + ms sql
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$.