Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Przestrzeń nazw Microsoft.Data.SqlClient zawiera obsługiwanego dostawcę danych .NET dla baz danych zgodnych z SQL Server. Początkowo był forkiem System.Data.SqlClient i zachowuje znany model programowania ADO.NET, jednocześnie wprowadzając nowe funkcje SQL Server niezależnie od środowiska uruchomieniowego .NET.
Użyj Microsoft.Data.SqlClient do nowych opracowań.
Zainstaluj i zaimportuj przestrzeń nazw
Dodaj pakiet NuGet:
dotnet add package Microsoft.Data.SqlClient
Zaimportuj przestrzeń nazw:
using Microsoft.Data.SqlClient;
Większość aplikacji używa SqlConnection, SqlCommand, SqlParameter, SqlDataReader, oraz .SqlTransaction Pełny publiczny interfejs API opisano w dokumentacji interfejsu API Microsoft.Data.SqlClient.
Związek z ADO.NET
ADO.NET to model dostępu do danych wbudowany w .NET. Definiuje abstrakcje niezależne od dostawcy w przestrzeni nazw System.Data.Common, a Microsoft.Data.SqlClient dostarcza konkretne implementacje.
| Abstrakcja ADO.NET | Typ SqlClient | Purpose |
|---|---|---|
| DbConnection | SqlConnection | Otwiera logiczne połączenie z jedną bazą danych. |
| DbCommand | SqlCommand | Wykonuje tekst Transact-SQL (T-SQL) lub procedurę przechowywaną. |
| DbParameter | SqlParameter | Wysyła wpisaną wartość oddzielnie od tekstu polecenia. |
| DbDataReader | SqlDataReader | Strumieniuje wiersze wyników z serwera. |
| DbTransaction | SqlTransaction | Grupuje polecenia w jedną transakcję, dzięki czemu są zatwierdzane lub wycofywane jako całość. |
| DbDataAdapter | SqlDataAdapter | Wypełnia i aktualizuje odłączone obiekty DataSet i DataTable. |
| DbBatch | SqlBatch | Wysyła wiele poleceń w jednej partii w obsługiwanych platformach docelowych. |
Microsoft. Data.SqlClient oferuje także specyficzne dla SQL Server API takie jak:
SqlBulkCopySqlConnectionStringBuilderSqlConfigurableRetryFactorySqlDependency- Specyficzna dla SQL Server uwierzytelnianie, szyfrowanie i wsparcie dla typów danych
Programuj przeciwko abstrakcjom ADO.NET, gdy biblioteka musi obsługiwać wielu dostawców baz danych. Używaj typów SqlClient, gdy aplikacja celuje w SQL Server i potrzebuje funkcji specyficznych dla dostawcy, takich jak uwierzytelnianie Microsoft Entra, Always Encrypted, kopiowanie masowe, parametry tabelowe lub konfigurowalna logika ponawiania prób. Zachowaj kod specyficzny dla dostawcy za granicą dostępu do danych, jeśli reszta aplikacji musi pozostać niezależna od dostawcy.
Dostęp online i offline
Dostęp połączony utrzymuje połączenie otwarte podczas wykonywania polecenia i podczas odczytywania jego wyników przez aplikację. Typowe żądanie przebiega następująco:
- Utwórz
SqlConnectionz parametrów połączenia, a następnie go otwórz. - Utwórz
SqlCommandi dodaj wartościSqlParameter. - Wykonaj polecenie .
- Przetwórz wartość skalarną, liczbę zmienionych wierszy lub
SqlDataReader. - Usuń czytnik, polecenie i połączenie.
Korzystaj z dostępu połączonego do większości API webowych, usług, pracowników i aplikacji wiersza poleceń.
SqlDataReader przetwarza wiersze strumieniowo i zwykle zużywa mniej pamięci niż ładowanie całego wyniku do DataSet.
Dostęp rozłączony używa SqlDataAdapter do kopiowania danych do znajdującego się w pamięci DataSet lub DataTable. Aplikacja może zamknąć połączenie podczas odczytu lub zmiany danych w pamięci, a następnie ponownie się połączyć, aby przesłać aktualizacje. Używaj go do wiązania danych, relacji i ograniczeń w pamięci, edycji offline, których zmiany później scalasz, lub istniejącej aplikacji opartej na DataAdapterach. Dla nowych usług zorientowanych na żądania zaczynamy od SqlCommand i SqlDataReader.
Czas życia obiektu i współbieżność
Otwórz i zwolnij po jednym SqlConnection dla każdej jednostki pracy. Pula połączeń ponownie wykorzystuje bazowe połączenie fizyczne, więc nie trzymaj jednego globalnego połączenia otwartego przez cały okres życia aplikacji. Szybko usuwaj połączenia, polecenia, czytniki, transakcje i kopiuj obiekty masowo. W kodzie asynchronicznym używamy await using dla typów, które implementują IAsyncDisposable w docelowym środowisku, takich jak SqlConnection i SqlDataReader na platformie .NET, oraz zwykłych using dla typów implementujących tylko IDisposable, takich jak SqlBulkCopy.
SqlConnection, SqlCommand, SqlDataReader oraz SqlTransaction nie obsługują współbieżnego użycia przez wiele wątków. Zapewnij każdej współbieżnej operacji osobne połączenie i korzystaj z puli połączeń. Multiple Active Result Sets (MARS) umożliwia uzyskanie więcej niż jednego aktywnego zestawu wyników w ramach jednego połączenia, ale nie sprawia, że obiekty SqlClient są bezpieczne wątkowo.
Związek z System.Data.SqlClient
System.Data.SqlClient jest starszym dostawcą, który wchodzi w skład platformy .NET Framework oraz wcześniejszych wydań platformy .NET.
Microsoft.Data.SqlClient używa wielu tych samych nazw typów, ale posiada różne pakiety, przestrzenie nazw, domyślne konfiguracje, funkcje i polityki wsparcia.
Nie odwołuj się do obu dostawców w nowym kodzie aplikacji. Typy o tej samej nazwie z obu pakietów nie są wymienne.
System.Data.SqlClient.SqlConnection, na przykład, nie może zostać przekazane w miejscu, w którym wymagane jest Microsoft.Data.SqlClient.SqlConnection.
Migracja zwykle zaczyna się od dodania pakietu Microsoft.Data.SqlClient i zmiany odniesień do przestrzeni nazw, ale musisz także przejrzeć szyfrowanie połączenia, parametry, konfigurację, zależności tranzytywne oraz zachowanie w czasie działania. Postępuj zgodnie z instrukcjami w Migracja z System.Data.SqlClient do Microsoft.Data.SqlClient przed wdrożeniem.
Zgodność wersji
Wersja pakietu sterownika jest niezależna od wersji .NET aplikacji oraz wersji silnika bazy danych. Sprawdź wszystkie trzy:
| Component | Co należy zweryfikować |
|---|---|
| Microsoft.Data.SqlClient | Linia wydania jest obsługiwana i zawiera funkcje, z których korzysta Twoja aplikacja. |
| .NET lub .NET Framework | Aplikacja celuje w czas działania obsługiwany przez tę wersję sterownika. |
| Baza danych zgodna z SQL Server | Wersja sterownika obsługuje wersję bazy danych, a serwer obsługuje dowolną żądaną funkcję protokołu, taką jak TDS 8.0. |
Aktualne macierze można znaleźć w cyklu życia wsparcia sterowników SqlClient.
Zmiany specyficzne dla wersji
Wersje sterowników mogą dodawać API, przenosić opcjonalne zależności oraz zmieniać bezpieczne domyślne ustawienia. Przeglądaj zmiany przed każdą drobną lub większą aktualizacją.
Oto kilka przykładów:
- W wersji 4.0 ustawienie
Encryptzostało zmienione tak, aby domyślnie miało wartośćtrue. - Wersja 5.0 wprowadziła
SqlConnectionEncryptOptioniEncrypt=Strictdla TDS 8.0. - Wersja 5.2 wprowadziła
SqlBatchdla obsługiwanych nowoczesnych platform docelowych .NET. - Wersja 7.0 przeniosła uwierzytelnianie Microsoft Entra udostępniane przez sterownik do
Microsoft.Data.SqlClient.Extensions.Azure.
Zobacz Co nowego w produkcie Microsoft.Data.SqlClient, aby uzyskać linki do informacji o wydaniu oraz podsumowanie aktualizacji.
Powiązane przestrzenie nazw i pakiety
Niektóre funkcje wykorzystują typy poza główną przestrzenią nazw lub opcjonalne pakiety.
| Przestrzeń nazw lub pakiet | Purpose |
|---|---|
Microsoft.Data.SqlClient.Server |
Implementacje SqlClient elementów SqlDataRecord i SqlMetaData. |
Microsoft.Data.SqlTypes |
Typy specyficzne dla SqlClient, takie jak SqlFileStream, SqlJson, oraz SqlVector<T>. |
Microsoft.Data.SqlClient.Diagnostics |
Silnie typowane ładunki zdarzeń diagnostycznych. |
Microsoft.Data.SqlClient.Extensions.Azure |
Uwierzytelnianie Microsoft Entra zapewniane przez sterownik dla wersji 7.0 i nowszych. |
Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider |
Integracja z usługą Azure Key Vault dla funkcji Always Encrypted. |
Nie wyciągaj wniosków o wymaganiach pakietu tylko na podstawie przestrzeni nazw. Podążaj za artykułem o funkcjach oraz informacjami o zależności pakietu NuGet dla wersji sterownika, której używasz.