Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Microsoft. Data.SqlClient adalah penyedia data .NET yang didukung untuk SQL Server, Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, database SQL di Microsoft Fabric, dan Gudang di Microsoft Fabric. Ini didistribusikan sebagai paket NuGet, berkembang secara independen dari runtime .NET, dan menggantikan System.Data.SqlClient untuk pengembangan baru. Ini menyediakan koneksi, perintah, pemrosesan hasil, transaksi, salinan massal, dan fitur khusus SQL Server untuk aplikasi .NET.
Pilih titik awal Anda
- Untuk mengatur proyek dan menjalankan kueri pertama Anda, mulai dengan Mulai dengan driver SqlClient.
- Untuk membuat database tujuan koneksi, lihat prasyarat di Mulai dengan driver SqlClient.
- Untuk menambah atau memperbarui driver dalam proyek .NET, buka Instal, perbarui, dan sebarkan Microsoft. Data.SqlClient.
- Untuk menyambungkan ke Azure SQL dengan autentikasi tanpa kata sandi, mulailah dengan autentikasi Microsoft Entra dan string Koneksi.
- Untuk membuat aplikasi yang ada lebih tahan terhadap kegagalan transien, buka Logika percobaan ulang yang dapat dikonfigurasi dan Ketersediaan tinggi dan pemulihan bencana.
- Untuk memindahkan kumpulan data besar secara efisien, buka Operasi salinan massal.
- Untuk migrasi dari
System.Data.SqlClient, mulai dengan Migrasi dari System.Data.SqlClient ke Microsoft. Data.SqlClient. - Untuk mendiagnosis masalah koneksi atau query, buka panduan pemecahan masalah SqlClient dan Aktifkan pelacakan sumber event.
Garis besar produksi untuk Azure SQL
Gunakan cuplikan ini sebagai titik awal untuk jalur akses data Azure SQL yang berorientasi pada produksi. Ini membaca nama server dan database dari IConfiguration, sehingga nilainya berasal dari penyedia konfigurasi yang dihubungkan oleh host, seperti appsettings.json, variabel lingkungan, Azure App Configuration, dan pengaturan yang didukung Key Vault. Konfigurasi ini menggabungkan fitur-fitur berikut:
- Keamanan Lapisan Transport (TLS).
- Identitas yang dikelola
- Ketahanan koneksi idle.
- Percobaan ulang koneksi awal melalui logika retry yang dapat dikonfigurasi (CRL), dengan logging terstruktur.
- Percobaan ulang tingkat perintah untuk kesalahan sementara yang terjadi di tengah kueri.
- Pemulihan cepat grup failover.
- Panggilan asinkron yang menerima token pembatalan.
Untuk keamanan yang lebih tinggi dan mendukung konfigurasi lintas lingkungan, simpan informasi koneksi di luar kode Anda. Dalam produksi, simpan informasi koneksi di sistem konfigurasi aplikasi Anda, dan gunakan Azure Key Vault untuk nilai-nilai sensitif. Untuk informasi selengkapnya, lihat Melindungi informasi koneksi.
Cuplikan C# dalam artikel ini tidak menyertakan direktif using dan pembungkus kelas agar singkat.
Cuplikan mengasumsikan sebuah proyek yang menargetkan .NET 8 atau versi yang lebih baru dan mereferensikan paket Microsoft.Data.SqlClient dan Microsoft.Data.SqlClient.Extensions.Azure versi 7.1.1. Host, seperti .NET Generic Host atau ASP.NET Core, menyediakan ILogger dan IConfiguration, dan konfigurasi memasok nama server di Sql:Server dan nama database di Sql:Database.
public static async Task<string> QueryDatabaseNameAsync(
IConfiguration config, ILogger logger, CancellationToken cancellationToken = default)
{
string server = config["Sql:Server"]
?? throw new InvalidOperationException("Missing configuration value 'Sql:Server'.");
string database = config["Sql:Database"]
?? throw new InvalidOperationException("Missing configuration value 'Sql:Database'.");
var builder = new SqlConnectionStringBuilder
{
DataSource = server,
InitialCatalog = database,
Authentication = SqlAuthenticationMethod.ActiveDirectoryManagedIdentity,
Encrypt = SqlConnectionEncryptOption.Strict, // TDS 8.0 encryption (server must support it)
ConnectTimeout = 30, // per-attempt connect timeout in seconds
// Retry transient failures during Open() and reconnect a dropped idle connection.
// The configurable provider below adds another policy around Open().
ConnectRetryCount = 3,
ConnectRetryInterval = 10,
MultiSubnetFailover = true, // recommended for TCP endpoints; enables parallel connect
// ApplicationIntent = ApplicationIntent.ReadOnly, // uncomment to route to a readable secondary
};
// Add exponential backoff and jitter around Open().
// TransientErrors is null, so the provider uses the driver's built-in transient error list.
var openRetry = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(
new SqlRetryLogicOption
{
NumberOfTries = 5,
DeltaTime = TimeSpan.FromSeconds(3),
MaxTimeInterval = TimeSpan.FromSeconds(60),
});
openRetry.Retrying += (_, args) =>
{
Exception last = args.Exceptions[^1];
logger.LogWarning(
last,
"Retrying SQL connection to {Server}/{Database} (attempt {Attempt}) after {Delay}",
server, database, args.RetryCount, args.Delay);
};
// Retry commands that hit deadlocks, lock timeouts, or common Azure SQL transient errors
// mid-query on an established connection. Only attach this provider to commands whose
// effect is safe to repeat.
var commandRetry = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(
new SqlRetryLogicOption
{
NumberOfTries = 4,
DeltaTime = TimeSpan.FromSeconds(5),
MaxTimeInterval = TimeSpan.FromSeconds(30),
// Deadlock victim, lock-request timeout, and common Azure SQL transient errors.
TransientErrors = new[] { 1205, 1222, 10928, 10929, 40197, 40501, 40613, 49918 },
});
commandRetry.Retrying += (_, args) =>
{
Exception last = args.Exceptions[^1];
logger.LogWarning(
last,
"Retrying SQL command (attempt {Attempt}) after {Delay}",
args.RetryCount, args.Delay);
};
await using var connection = new SqlConnection(builder.ConnectionString)
{
RetryLogicProvider = openRetry,
};
await connection.OpenAsync(cancellationToken);
await using var command = new SqlCommand("SELECT DB_NAME()", connection)
{
RetryLogicProvider = commandRetry,
CommandTimeout = 30,
};
var name = (string)await command.ExecuteScalarAsync(cancellationToken);
logger.LogInformation("Connected to database {DatabaseName}", name);
return name;
}
Metode mengembalikan nama database yang dihubungkannya dan mencatatnya ke Connected to database <database>. Ketika percobaan ulang terjadi, ia juga mencatat satu peringatan per percobaan beserta exception yang memicunya.
Cara kerja setiap bagian dari cuplikan ini:
- Target: Setiap endpoint SQL Database Engine yang dikonfigurasi untuk autentikasi Microsoft Entra: Azure SQL Database, Azure SQL Managed Instance, database SQL di Microsoft Fabric, dan SQL Server 2022 dan versi selanjutnya di Azure Virtual Machines atau diaktifkan oleh Azure Arc.
-
Encrypt = SqlConnectionEncryptOption.Strict: Memilih enkripsi TDS 8.0. Diperlukan SQL Server 2022 dan versi yang lebih baru, Azure SQL Database, Azure SQL Managed Instance, atau database SQL di Microsoft Fabric. GunakanSqlConnectionEncryptOption.Mandatoryuntuk server lama. -
ActiveDirectoryManagedIdentity: Hanya berfungsi di tempat yang tersedia identitas terkelola, seperti Azure App Service, Azure Functions, atau mesin virtual Azure. Untuk pengembangan lokal, gunakanSqlAuthenticationMethod.ActiveDirectoryDefault, yang mencoba Azure CLI, autentikasi Visual Studio, dan sumber kredensial lainnya. Biarkan tetap di luar produksi karena menguji setiap sumber akan memperlambat koneksi. Untuk informasi lebih lanjut, lihat Gunakan autentikasi default. -
MultiSubnetFailover = true: Mencoba koneksi TCP ke semua alamat IP yang terselesaikan secara paralel dan menggunakan koneksi pertama yang berhasil, menghindari langkah berurutan per IP yang lambat. Atur untuk Azure SQL Database, Azure SQL Managed Instance, database SQL di Microsoft Fabric, availability group listeners, dan failover cluster instances. Aman untuk target single-IP. Ini tidak didukung untuk instance bernama, protokol selain TCP, instance dengan lebih dari 64 alamat IP, atau pencerminan basis data yang tidak disarankan lagi. Gunakan grup ketersediaan AlwaysOn sebagai gantinya. Untuk informasi lebih lanjut, lihat Ketersediaan tinggi dan pemulihan bencana serta Menonaktifkan Resolusi IP Jaringan Transparan. -
ConnectRetryCount = 3danConnectRetryInterval = 10: Driver mencoba ulang kegagalan sementara yang memenuhi syarat selamaOpen(), dan menghubungkan kembali koneksi idle yang terputus pada perintah berikutnya. Jumlah defaultnya adalah 1. Tiga percobaan yang berjarak 10 detik dapat bertahan melewati konfigurasi ulang atau failover yang lebih lama. Driver hanya menaikkan 1 ke 2 ketika nama server berakhir di domain Azure SQL yang dikenal, seperti.database.windows.net, sehingga alias DNS kustom tetap bernilai 1. -
openRetry: Ditugaskan ke SqlConnection.RetryLogicProvider, ini menambahkan backoff eksponensial sekitarOpen(). Driver menghentikan percobaan internal saatConnectTimeouthabis, jadi skenario terburuk sebelumOpenAsyncmelempar error adalah lima percobaan hingga 30 detik masing-masing, ditambah backoff. Setiap upaya reconnect idle juga menjalankan kebijakan penuhopenRetry, dan ketika kebijakan tersebut menghabiskan seluruh percobaan ulangnya, pemulihan idle berakhir. -
Serverless auto-pause: Untuk Azure SQL Database serverless, tingkatkan
ConnectTimeouthingga minimal 60 detik. Yang pertamaOpen()dapat gagal dengan kesalahan40613saat database dipulihkan, danopenRetrymencobanya kembali. Timeout sisi klien muncul sebagai error-2, yang tidak dicoba ulang, jadi setiap upaya koneksi harus bertahan lebih lama daripada proses melanjutkan kembali. Untuk informasi lebih lanjut, lihat Auto-pause dan auto-resume. -
commandRetry: Terapkan pada SqlCommand.RetryLogicProvider hanya saat memutar ulang perintah aman: operasi baca,MERGEyang dilindungi oleh kunci natural, upsert melalui prosedur tersimpan, dan operasi idempoten lainnya. Sistem melewatkan percobaan ulang di dalam transaksi, sehingga kode aplikasi harus mencoba ulang transaksi multi-pernyataan.ExecuteReaderdanExecuteScalarhanya mencoba ulang jika kesalahan dikembalikan sebelum set hasil pertama dimulai.ExecuteNonQuerymencoba ulang seluruh panggilan. -
Daftar kesalahan sementara: Pengaturan
TransientErrorsmenggantikan daftar bawaan. Untuk memperluasnya, gunakan SqlConfigurableRetryFactory.BaselineTransientErrors (Microsoft. Data.SqlClient 7.0 dan versi lebih baru). -
Retryingevent: Retrying dipicu sebelum setiap percobaan ulang dengan jumlah percobaan ulang, penundaan berikutnya, dan pengecualian sejauh ini. Rutekannya ke ILogger atau pipeline telemetri Anda. - Pengecualian: Metode ini tidak menangkap pengecualian. Penyedia yang kelelahan melempar AggregateException dengan pengecualian dari setiap percobaan. Kesalahan non-transien menyebar sebagai eksepsi asli. Pemanggil mencatatnya sekali bersama konteks permintaan lainnya.
-
Pembatalan: CancellationToken menghentikan jeda tunggu penyedia di antara percobaan ulang. Itu tidak mengganggu penantian pengemudi
ConnectRetryIntervaldalam satuOpenkali percobaan. Untuk informasi lebih lanjut, lihat Pemrograman asinkron. - Masa aktif provider: Cuplikan ini membuat provider percobaan ulang di setiap panggilan agar tetap mandiri. Dalam aplikasi, buat objek tersebut sekali dan gunakan kembali.
Untuk informasi selengkapnya tentang setiap bagian konfigurasi ini, lihat:
- String koneksi
- Autentikasi Microsoft Entra
- Enkripsi dan validasi sertifikat
- Logika coba lagi yang dapat dikonfigurasi
- Ketersediaan tinggi dan pemulihan bencana
Pelajari tugas inti akses data
Setelah Anda terhubung, gunakan artikel-artikel berikut secara berurutan:
- Gunakan perintah untuk memilih bentuk hasil dan jalankan Transact-SQL (T-SQL).
- Konfigurasikan parameter agar sesuai dengan kontrak basis data.
- Ambil data dengan SqlDataReader untuk memproses baris dan beberapa hasil.
- Modifikasi data dengan prosedur tersimpan untuk menggunakan parameter output dan nilai kembali.
- Gunakan pemrograman asinkron dan pembatalan untuk menambahkan pembatalan penelepon dan timeout terbatas.
- Tangani kesalahan dan pesan sebelum Anda menambahkan percobaan ulang atau diagnostik produksi.
Fitur utama
- Dukungan .NET modern: Berjalan pada versi .NET dan .NET Framework saat ini. Untuk rincian per versi, lihat Siklus hidup Dukungan.
-
Terenkripsi secara default: Koneksi terenkripsi TLS dengan
Encrypt=truesebagai default. AturEncrypt=Strictuntuk enkripsi TDS 8.0. - autentikasi Microsoft Entra ID: Koneksi tanpa kata sandi dengan identitas terkelola, perwakilan layanan, interaktif, terintegrasi, rantai kredensial default, dan alur token akses.
- Kerberos dan NTLM: autentikasi Windows terintegrasi untuk Active Directory lokal dan skenario lama.
- Always Encrypted: Enkripsi sisi klien untuk kolom sensitif, dengan enklave aman opsional untuk operasi di tempat.
- Penyalinan massal: Penyisipan berthroughput tinggi dengan SqlBulkCopy.
- Connection pooling: Aktif secara default. Pool V2 opt-in sedang dalam evaluasi.
-
Keandalan koneksi: Percobaan ulang koneksi bawaan (
ConnectRetryCountdanConnectRetryInterval) serta logika percobaan ulang opsional yang dapat dikonfigurasi untuk koneksi dan perintah. -
Tipe data SQL Server kaya:
datetimeoffset,sql_variant, JSON, vektor, spasial, XML, dan parameter bernilai tabel. - Diagnostik: Pelacakan sumber kejadian, penghitung diagnostik, statistik penyedia, dan panduan pemecahan masalah khusus.
-
Identitas aplikasi: Atur
SqlConnection.RegisteredApplicationuntuk mengidentifikasi pustaka atau alat Anda untuk SQL Server (Microsoft.Data.SqlClient 7.1 dan versi lebih baru).
Get started
| Artikel | Deskripsi |
|---|---|
| Mulai dengan driver SqlClient | Siapkan proyek, buat database, hubungkan, kueri, dan tambahkan ketahanan koneksi. |
| Instal, perbarui, dan sebarkan Microsoft. Data.SqlClient | Instal paket NuGet, pilih rilis, perbarui driver, dan siapkan output deployment. |
| Siklus hidup dukungan | Tinjau versi driver yang didukung dan tanggal dukungan. |
| Migrasi dari System.Data.SqlClient ke Microsoft. Data.SqlClient | Perbarui referensi paket, namespace, konfigurasi, dan perilaku driver yang diubah. |
| Microsoft. Data.SqlClient namespace dan kompatibilitas | Pahami bagaimana SqlClient mengimplementasikan ADO.NET dan kompatibilitasnya dengan System.Data.SqlClient, .NET, dan SQL Server. |
| Apa yang baru di Microsoft. Data.SqlClient | Temukan rilis terbaru, perubahan peningkatan besar, dan catatan rilis upstream. |
Mengonfigurasi dan menyambungkan
| Artikel | Deskripsi |
|---|---|
| Hubungkan ke sumber data | Buka dan kelola koneksi, serta menanggapi perubahan status koneksi. |
| String koneksi | Konfigurasikan server, basis data, autentikasi, enkripsi, dan perilaku koneksi. |
| Enkripsi dan validasi sertifikat | Konfigurasikan koneksi terenkripsi dan validasi sertifikat server. |
| Pooling koneksi SQL Server | Gunakan kembali koneksi fisik secara efisien. |
| Menangani kesalahan dan pesan | Deteksi kesalahan dan terima pesan informasional. |
Autentikasi dan amankan
| Artikel | Deskripsi |
|---|---|
| Praktik terbaik keamanan untuk Microsoft.Data.SqlClient | Tinjau panduan autentikasi, otorisasi, dan keamanan aplikasi. |
| Autentikasi Microsoft Entra | Terhubung dengan alur identitas terkelola, prinsipal layanan, kata sandi, dan interaktif. |
| Lindungi informasi koneksi | Jaga agar kredensial dan pengaturan koneksi tidak masuk ke kode aplikasi. |
| Selalu Terenkripsi | Lindungi nilai kolom sensitif dari sistem basis data. |
| Selalu Terenkripsi dengan enklave yang aman | Jalankan beragam operasi pada data terenkripsi dengan enklave aman. |
Ambil dan perbarui data
| Artikel | Deskripsi |
|---|---|
| Eksekusi perintah | Jalankan pernyataan SQL yang diparameterisasi dan prosedur tersimpan. |
| DataAdapters dan DataReaders | Alirkan kumpulan hasil atau isi struktur data yang tidak terhubung. |
| Jalankan beberapa perintah dengan SqlBatch | Kirim kumpulan perintah yang terurut dan memproses hasilnya. |
| Data stream | Transfer nilai biner, teks, XML, dan JSON besar tanpa membuffer seluruh nilai. |
| Transaksi dan konkurensi | Gunakan transaksi lokal dan terdistribusi serta kontrol konkurensi. |
| Ambil informasi skema basis data | Temukan koleksi skema dan pembatasan. |
| Operasi penyalinan massal | Muat set data besar secara efisien dengan SqlBulkCopy. |
| Parameter bernilai tabel | Kirim beberapa baris ke pernyataan atau prosedur tersimpan yang diparameterkan. |
| Beberapa Set Hasil Aktif (MARS) | Sisipkan beberapa batch secara berselang-seling pada satu koneksi. |
Jenis data
| Artikel | Deskripsi |
|---|---|
| Pemetaan tipe data SQL Server | Petakan tipe SQL Server ke tipe .NET dan System.Data.SqlTypes |
| Data JSON | Kirim dan mengambil tipe data SQL Server json. |
| Data vektor | Kirim dan ambil nilai vektor. |
| Data XML | Baca, tulis, dan parameterisasi nilai XML. |
| Data biner dan bernilai besar | Alirkan dan perbarui data biner, FILESTREAM, dan data bernilai besar. |
Keandalan dan diagnostik
| Artikel | Deskripsi |
|---|---|
| Logika coba lagi yang dapat dikonfigurasi | Coba ulang kegagalan koneksi sementara dan perintah dengan kebijakan terbatas. |
| Ketersediaan tinggi dan pemulihan bencana | Terhubung ke pendengar grup ketersediaan dan mitra failover. |
| Penghitung peristiwa di SqlClient | Pantau koneksi aktif, koneksi dalam pool, dan metrik driver lainnya. |
| Aktifkan pelacakan sumber peristiwa | Rekam kejadian pengemudi secara rinci untuk diagnosis. |
| Panduan pemecahan masalah SqlClient | Mendiagnosis masalah umum koneksi dan driver. |
| Notifikasi kueri | Terima notifikasi saat hasil kueri berubah. |
fitur SQL Server
| Artikel | Deskripsi |
|---|---|
| Fitur SQL Server dan ADO.NET | Jelajahi fitur khusus SQL Server yang tersedia melalui SqlClient. |
| LocalDB | Sambungkan ke instance SQL Server Express LocalDB. |
| Penemuan dan Klasifikasi Data | Baca metadata klasifikasi sensitivitas dari kumpulan hasil. |
Referensi dan sumber daya
| Artikel | Deskripsi |
|---|---|
| Referensi API Microsoft.Data.SqlClient | Telusuri referensi API .NET untuk driver. |
| Pengalihan AppContext | Konfigurasikan perilaku kompatibilitas dan keamanan. |
| Repositori GitHub Microsoft.Data.SqlClient | Baca kode sumber driver, catatan rilis, dan sampel. |
| Contoh Microsoft.Data.SqlClient | Jelajahi contoh C# untuk API driver. |
| Repositori GitHub runtime .NET | Baca sumber untuk pustaka runtime .NET. |
Meminta fitur
Untuk mengajukan permintaan fitur, buat issue di repositori GitHub Microsoft.Data.SqlClient.