Narzędzia projektowania połączeń ADO

advertisement
Narzędzia projektowania połączeń ADO.NET
Aby aplikacja mogła uzyskać dostęp do źródła danych, należy utworzyć odpowiednie połączenie z tym źródłem.
Uwaga Obiekty DataAdapter, Connection, Command oraz DataReader to komponenty tworzące zarządzanych
dostawców danych .NET Framework. Microsoft oraz inne firmy mogą udostępnić innych dostawców danych
.NET, pozwalających na integrację z Visual Studio. Więcej informacji na temat dostawców danych .NET
Framework można znaleźć w artykule Dostawcy danych .NET Framework.
Do tworzenia i zarządzania połączeniami ze źródłami danych w ADO.NET służą obiekty Connection:

SqlConnection — zarządza połączeniami z bazami danych SQL Server w wersji 7.0 lub nowszej. Dzięki
(między innymi) pominięciu warstwy OLE DB jest zoptymalizowany do pracy z bazami SQL Server w wersji
7.0 lub nowszej.

OleDbConnection — zarządza połączeniami ze źródłami danych, dostępnymi poprzez OLE DB.

OdbcConnection — zarządza połączeniami ze źródłami danych, dostępnymi za pośrednictwem ODBC.
Tworzony na podstawie łańcucha połączenia lub nazwy źródła danych ODBC (Data Source Name — DSN).

OracleConnection — zarządza połączeniami z bazami Oracle.
Łańcuchy połączenia
Wszystkie obiekty Connection posiadają podobne składowe, jednak dostępność niektórych składowych obiektu
OleDbConnection zależy od rodzaju źródła danych, do którego obiekt ten jest przyłączony. Istnieją źródła
danych, które nie obsługują niektórych składowych klasy OleDbConnection.
Najważniejszą właściwością obiektu Connection jest właściwość ConnectionString, która zawiera łańcuch
znaków składający się z par atrybut-wartość, zawierających informacje wymagane do zalogowania się do bazy
danych i wybrania właściwej bazy. Typowa wartość właściwości ConnectionString ma następującą postać:
Provider=SQLOLEDB.1;Data Source=MySQLServer;Initial
Catalog=NORTHWIND;Integrated Security=SSPI
Przedstawiony w przykładzie łańcuch połączenia określa, że do komunikacji z bazą danych używane będą
zintegrowane zabezpieczenia Windows (uwierzytelnianie NT). Łańcuch połączenia może także zawierać nazwę
i hasło użytkownika, jednak stosowanie takiego rozwiązania nie jest zalecane, ponieważ atrybuty te zostają
w postaci jawnej umieszczone w skompilowanej wersji aplikacji, co stanowi potencjalne zagrożenie dla
bezpieczeństwa systemu. Więcej informacji na ten temat można znaleźć w artykule Uprawnienia dostępu do
aplikacji internetowych i Model zabezpieczeń.
Uwaga dotycząca bezpieczeństwa Przechowywanie parametrów połączenia (takich jak nazwa serwera,
nazwa użytkownika i hasło) może mieć wpływ na bezpieczeństwo aplikacji. Stosowanie zintegrowanych
zabezpieczeń Windows jest o wiele bezpieczniejszym rozwiązaniem kontroli dostępu do bazy danych. Więcej
informacji znaleźć można w artykule Bezpieczeństwo baz danych.
Najbardziej popularne pary atrybut-wartość, stosowane w OLE DB, są także dostępne w postaci indywidualnych
właściwości — na przykład DataSource lub Database. W czasie pracy z obiektem Connection, parametry
połączenia można ustawić albo przypisując pojedynczy ciąg znaków do właściwości ConnectionString, albo
ustawiając indywidualne właściwości obiektu Connection. Jeśli używane źródło danych wymaga podania
parametru połączenia, który nie jest dostępny w postaci indywidualnej właściwości, konieczne jest użycie
pierwszej metody. We właściwości ConnectionString można także podać ścieżkę do pliku Microsoft Data Link
(.udl). Więcej informacji na temat tych plików można znaleźć w dokumencie Wprowadzenie do Data Link API.
Uwaga
Obiekt SQLConnection nie obsługuje i nie pozwala na podanie atrybutu Provider.
Otwieranie i zamykanie połączeń
Dwie najważniejsze metody obiektu Connection to Open i Close. Metoda Open na podstawie informacji
zawartych we właściwości ConnectionString kontaktuje się ze źródłem danych i otwiera połączenie. Metoda
Close zamyka otwarte połączenie. Zamykanie połączeń jest bardzo ważne, ponieważ większość źródeł danych
może obsłużyć tylko ograniczoną liczbę połączeń, a otwarte połączenia zajmują cenne zasoby systemowe.
Działanie z obiektami DataAdapter i Command nie wymaga ręcznego otwierania i zamykania połączeń. Gdy
wywołujemy jakąś metodę tych obiektów (na przykład metody Fill lub Update obiektu DataAdapter), metoda
ta sprawdza, czy połączenie jest już otwarte. Jeśli nie, otwiera połączenie, wykonuje swoje zadanie i ponownie
zamyka połączenie.
Metody takie jak Fill otwierają połączenie automatycznie tylko wtedy, gdy nie zostało ono jeszcze otwarte. Jeśli
połączenie jest już otwarte, zostanie użyte przez metodę i pozostanie otwarte po zakończeniu działania metody.
Daje to możliwość ręcznego otwierania i zamykania połączeń. Taka możliwość przydatna jest wtedy, gdy mamy
wiele obiektów DataAdapter, które korzystają z tego samego źródła danych. W takim przypadku ciągłe
otwieranie i zamykanie połączenia przy każdym wywołaniu metody Fill jest nieefektywne. Lepszym
rozwiązaniem jest otwarcie połączenia, wywołanie metod Fill wszystkich obiektów DataAdapter i zamknięcie
połączenia.
Pule połączeń
Różni użytkownicy aplikacji często korzystają z bazy danych w taki sam sposób. Na przykład w aplikacjach
internetowych ASP.NET wielu użytkowników może pobierać te same dane z tej samej bazy danych. W takich
przypadkach można podnieść wydajność aplikacji poprzez współdzielenie połączeń z bazą danych (utworzenie
„puli” połączeń). Narzut na otwieranie i zamykanie osobnego połączenia dla każdego użytkownika może
znacznie spowolnić działanie aplikacji.
W obiektach OleDbConnection, OdbcConnection oraz OracleConnection pule połączeń są obsługiwane
automatycznie przez dostawcę danych, tak więc nie trzeba zarządzać nimi własnoręcznie.
W klasie SqlConnection zarządzanie pulami także odbywa się niejawnie, ale dostawca danych umożliwia
również własnoręczne zarządzanie połączeniami. Więcej informacji można znaleźć w artykule Pule połączeń
w dostawcy danych platformy .NET Framework dla SQL Server.
Transakcje
Obiekty Connection pozwalają na obsługuję transakcji z wykorzystaniem metody BeginTransaction, która
tworzy obiekt transakcji (na przykład obiekt SqlTransaction). Obiekt transakcji udostępnia metody, które
pozwalają potwierdzić lub wycofać transakcję.
Zarządzanie transakcjami odbywa się z poziomu kodu aplikacji. Więcej informacji można znaleźć w artykule
Obsługa transakcji.
Konfigurowalne właściwości połączeń
W przypadku większości aplikacji, na etapie projektowania nie da się przewidzieć parametrów połączenia. Jest
to prawdą dla wszystkich aplikacji przeznaczonych dla większej grupy odbiorców — w czasie projektowania
aplikacji nie da się określić parametrów takich jak nazwa serwera bazy danych.
Właśnie dlatego łańcuchy połączeń często definiowane są jako właściwości dynamiczne. Ponieważ właściwości
dynamiczne przechowywane są w pliku konfiguracyjnym (kompilator nie umieszcza ich w plikach
wykonywalnych aplikacji), mogą być zmieniane bez ponownego kompilowania aplikacji.
Najczęściej stosowanym rozwiązaniem jest zdefiniowanie parametrów połączenia jako właściwości
dynamicznych i zapewnienie użytkownikom możliwości ustawienia w pliku konfiguracyjnym parametrów
połączenia (za pomocą małej aplikacji Windows Forms lub Web Forms). Mechanizm obsługi właściwości
dynamicznych w .NET Framework automatycznie pobiera wartości właściwości z pliku konfiguracyjnego i — jeśli
właściwość zostanie zmodyfikowana — zapisuje tam nowe wartości.
Parametry połączeń a bezpieczeństwo
Otwarcie połączenia umożliwia dostęp do ważnego zasobu, jakim jest baza danych, dlatego z konfiguracją
i używaniem połączeń często wiążą się problemy dotyczące bezpieczeństwa.
Sposób zabezpieczenia aplikacji i jej dostępu do źródła danych zależy od architektury systemu. Na przykład
użytkownicy aplikacji internetowych zwykle korzystają z uwierzytelniania anonimowego, zapewnianego przez
internetowe usługi informacyjne (IIS) i nie przedstawiają żadnych poświadczeń tożsamości. W takich
przypadkach aplikacja do otwierania połączeń i do dostępu do baz danych stosuje własne poświadczenia
zamiast poświadczeń użytkowników.
Uwaga dotycząca bezpieczeństwa Przechowywanie parametrów połączenia (takich jak nazwa serwera,
nazwa użytkownika i hasło) może mieć wpływ na bezpieczeństwo aplikacji. Stosowanie zintegrowanych
zabezpieczeń Windows jest o wiele bezpieczniejszym rozwiązaniem kontroli dostępu do bazy danych. Więcej
informacji znaleźć można w artykule Bezpieczeństwo baz danych.
Pliki binarne aplikacji internetowych ASP.NET oraz pliki konfiguracyjne są zabezpieczone przed dostępem
z Internetu poprzez wbudowany w ASP.NET model zabezpieczeń, który uniemożliwia dostęp do tych plików za
pośrednictwem protokołów internetowych (HTTP, FTP i tym podobne). Aby zablokować inne metody dostępu do
serwera internetowego (na przykład z wewnętrznej sieci firmy), należy użyć funkcji zabezpieczeń dostępnych
w systemie Windows.
W przypadku aplikacji intranetowych lub aplikacji dwuwarstwowych, można rozważyć użycie uwierzytelniania
zintegrowanego, obsługiwanego przez Windows, IIS i SQL Server. W takim modelu poświadczenia tożsamości,
wykorzystywane do logowania do sieci lokalnej, stosowane są także do uzyskiwania dostępu do bazy danych —
w konfiguracji połączenia nie trzeba jawnie podawać żadnych poświadczeń tożsamości (uprawnienia dostępu do
bazy danych przypisywane są grupom użytkowników, tak więc nie ma potrzeby przypisywania uprawnień
indywidualnym kontom użytkowników). W tym modelu w konfiguracji połączenia w ogóle nie ma informacji
o uwierzytelnianiu, tak więc nie trzeba podejmować dodatkowych działań, mających na celu zabezpieczenie
konfiguracji połączeń do baz danych.
Więcej informacji dotyczących zabezpieczeń można znaleźć w następujących źródłach:

Bezpieczeństwo — najlepsze praktyki

Zabezpieczenia platformy .NET Framework

Uprawnienia dostępu do aplikacji internetowych

Bezpieczeństwo aplikacji internetowych ASP.NET
Połączenia czasu projektowania
Narzędzie Server Explorer umożliwia tworzenie połączeń ze źródłami danych w czasie projektowania aplikacji.
Pozwala to na przeglądanie dostępnych źródeł danych, wyświetlanie informacji o tabelach, kolumnach i innych
elementach, a także na modyfikowanie i tworzenie elementów baz danych.
Połączenia utworzone w ten sposób nie są bezpośrednio wykorzystywane przez aplikację. Informacje uzyskane
za pomocą połączenia czasu projektowania wykorzystywane są do skonfigurowania nowego obiektu połączenia
stosowanego w aplikacji.
Na przykład, rozpoczynając projektowanie aplikacji można użyć narzędzia Server Explorer i utworzyć połączenie
z bazą danych Northwind, znajdującą się na serwerze SQL Server o nazwie MyServer. Następnie w czasie
projektowania formularza można przejrzeć bazę Northwind, wybrać kolumny z tabeli i przeciągnąć je na
projektowany formularz. Spowoduje to dodanie do tego formularza obiektu DataAdapter. Oprócz obiektu
DataAdapter zostanie także utworzony obiekt Connection (jego parametry zostaną ustawione zgodnie
z parametrami połączenia czasu projektowania). Podczas działania aplikacji obiekt ten będzie wykorzystywany
do uzyskania dostępu do bazy danych.
Informacje na temat połączeń czasu projektowania przechowywane są na komputerze lokalnym, niezależnie od
plików projektów i rozwiązań. Po utworzeniu połączenia czasu projektowania jest ono zawsze dostępne
w narzędziu Server Explorer (o ile dostępny jest serwer wskazywany przez to połączenie). Więcej informacji na
temat tworzenia połączeń czasu projektowania w narzędziu Server Explorer można znaleźć w artykule
Tworzenie nowych połączeń w narzędziu Server Explorer.
Uwaga Połączenie utworzone za pomocą narzędzia Server Explorer określa typ obiektów, które zostaną
utworzone podczas przeciągania elementów bazy danych na projektowany formularz. Na przykład, jeśli w czasie
projektowania aplikacji utworzymy połączenie do bazy SQL Server, używając dostawcy OLE DB Provider for
SQL Server, to przeciągnięcie tabeli z narzędzia Server Explorer na okno projektanta spowoduje utworzenie
obiektu SqlConnection. Jeśli aplikacja ma uzyskiwać dostęp do danych za pośrednictwem ODBC, podczas
tworzenia połączenia w narzędziu Server Explorer należy wybrać dostawcę OLE DB Provider for ODBC.
Narzędzia projektowania połączeń w Visual Studio
Podczas pracy w Visual Studio zwykle nie trzeba bezpośrednio tworzyć i zarządzać obiektami Connection. Jeśli
używamy narzędzi takich jak Data Adapter Wizard, kreatory pytają o parametry połączenia (atrybuty zapisane
w łańcuchu połączenia) i automatycznie tworzą obiekty Connection w formularzu lub komponencie, nad którym
obecnie pracujemy.
W razie potrzeby, obiekty Connection do formularza lub komponentu można dodać ręcznie. Sposób ten jest
szczególnie przydatny, jeśli nie stosujemy obiektów DataSet (a zatem nie korzystamy także z obiektów
DataAdapter), a tylko wczytujemy potrzebne nam dane. Własnoręczne tworzenie obiektów Connection
przydatne jest też przy obsłudze transakcji.
Zobacz także (materiały w języku angielskim)
Tworzenie obiektów połączeń w ADO.NET | Połączenie ze źródłem danych za pomocą ADO.NET | Pule połączeń
w dostawcy danych platformy .NET Framework dla SQL Server
Download