Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Microsoft.Data.SqlClient, SQL Server, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, Azure Synapse Analytics, Microsoft Fabric'teki SQL veritabanı ve Microsoft Fabric'teki Warehouse için desteklenen .NET veri sağlayıcısıdır. Bir NuGet paketi olarak dağıtılır, .NET çalışma zamanından bağımsız olarak geliştirilir ve yeni geliştirmelerde System.Data.SqlClient yerine geçer. .NET uygulamalarına bağlantılar, komutlar, sonuç işleme, işlemler, toplu kopyalama ve SQL Server'a özgü özellikler sağlar.
Başlangıç noktanızı seçin
- Bir proje kurmak ve ilk sorguyu çalıştırmak için SqlClient sürücüsünü kullanarak başla.
- Bağlanılacak bir veritabanı oluşturmak için, SqlClient sürücüsüyle çalışmaya başlama bölümündeki ön koşullara bakın.
- Bir .NET projesine sürücüyü eklemek ya da güncellemek için Microsoft.Data.SqlClient'i yükleme, güncelleştirme ve dağıtma bölümüne gidin.
- Azure SQL'e şifresiz kimlik doğrulama ile bağlanmak için Microsoft Entra kimlik doğrulaması ve Bağlantı dizileri ile başlayın.
- Mevcut bir uygulamayı geçici hatalara karşı dayanıklı hale getirmek için Yapılandırılabilir yeniden deneme mantığı ve Yüksek erişilebilirlik ve felaket kurtarma bölümlerine gidin.
- Büyük veri setlerini verimli bir şekilde taşımak için Toplu kopyalama işlemleri bölümüne gidin.
-
System.Data.SqlClientöğesinden geçiş yapmak için System.Data.SqlClient'tan Microsoft.Data.SqlClient'a geçiş ile başlayın. - Bir bağlantı veya sorgu sorununu teşhis etmek için SqlClient sorun giderme rehberine gidin ve Olay kaynağı takibi etkinleştirin.
Azure SQL için üretim temeli
Bu snippet'i, üretim odaklı bir Azure SQL veri erişim yolu için bir başlangıç noktası olarak kullanın. Sunucu ve veritabanı isimlerini IConfiguration öğesinden okur, böylece değerler hostun yapılandırdığı yapılandırma sağlayıcılarından gelir; örneğin appsettings.json, environment variables, Azure Uygulama Yapılandırması ve Key Vault-destekli ayarlar. Konfigürasyon şu özellikleri birleştirir:
- Taşıma Katmanı Güvenliği (TLS).
- Yönetilen kimlik.
- Boşta kalan bağlantı dayanıklılığı.
- Yapılandırılabilir yeniden deneme mantığı (CRL) ile ilk bağlantı için yeniden deneme, yapılandırılmış loglama ile.
- Sorgu sırasında meydana gelen geçici hatalar için komut seviyesinde yeniden deneme.
- Hızlı yük devretme grubu kurtarması.
- İptal tokenı kabul eden asenkron çağrılar.
Daha yüksek güvenlik ve ortamlar arasında yapılandırmayı desteklemek için bağlantı bilgilerini kodunuzun dışında tutun. Üretimde, bağlantı bilgilerini uygulamanızın yapılandırma sisteminde saklayın ve hassas değerler için Azure Key Vault'u kullanın. Daha fazla bilgi için bkz. Bağlantı bilgilerini koruma.
Bu makaledeki C# snippeti kısalık için direktifleri ve sınıf ambalajlarını çıkarır using .
Snippet, .NET 8 veya daha sonraki sürümleri hedefleyen ve Microsoft.Data.SqlClient.Extensions.Azure ile Microsoft.Data.SqlClient 7.1.1 paketlerine başvuran bir proje varsayımındadır. .NET Genel Sunucu veya ASP.NET Core gibi ana bilgisayar, IConfiguration ve ILogger öğelerini sağlar; yapılandırma ise sunucu adını Sql:Server içinde ve veritabanı adını Sql:Database içinde sağlar.
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;
}
Yöntem, bağlandığı veritabanının adını döndürür ve Connected to database <database> günlüğe kaydeder. Tekrar deneme olduğunda, onu tetikleyen istisna ile birlikte her tekrar denemede bir uyarı kaydedilir.
Snippet'in her bir parçası nasıl çalışır:
- Hedefler: Microsoft Entra doğrulaması için yapılandırılmış herhangi bir SQL Database Engine uç noktası: Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, Microsoft Fabric'te SQL database ve Azure Sanal Makineler üzerindeki veya Azure Arc ile etkinleştirilen SQL Server 2022 ve sonraki sürümler.
-
Encrypt = SqlConnectionEncryptOption.Strict: TDS 8.0 şifrelemesini seçer. SQL Server 2022 ve daha sonraki sürümleri, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği veya Microsoft Fabric'te SQL veritabanı gerektirir. Eski sunucular içinSqlConnectionEncryptOption.Mandatorykullanın. -
ActiveDirectoryManagedIdentity: Yalnızca Azure App Service, Azure İşlevleri veya Azure sanal makinesi gibi yönetilen bir kimlik mevcut olduğunda çalışır. Yerel geliştirme için, Azure CLI'ı, Visual Studio oturum açmasını ve diğer kimlik bilgisi kaynaklarını deneyenSqlAuthenticationMethod.ActiveDirectoryDefaultkullanın. Üretimden uzak tutun çünkü her kaynağı yoklamak bağlantıyı yavaşlatıyor. Daha fazla bilgi için Varsayılan kimlik doğrulamayı kullan bölümüne bakın. -
MultiSubnetFailover = true: Tüm çözülmüş IP adreslerine paralel olarak TCP bağlantıları dener ve başarılı olan ilk bağlantıyı kullanır, böylece IP’ler arasında yavaş ardışık denemeden kaçınır. Bunu Azure SQL Veritabanı, Azure SQL Yönetilen Örneği, Microsoft Fabric'teki SQL veritabanı, kullanılabilirlik grubu dinleyicileri ve yük devretme kümesi örnekleri için ayarlayın. Tek IP’li hedeflerde güvenlidir. Adlandırılmış örnekler, TCP dışındaki protokoller, 64'ten fazla IP adresi olan örnekler veya kullanımdan kaldırılmış veritabanı yansıtma için desteklenmez. Bunun yerine Always On kullanılabilirlik gruplarını kullanın. Daha fazla bilgi için Yüksek erişilebilirlik ve felaket kurtarma ve Şeffaf Ağ IP Çözümlemesini devre dışı bırakma konularına bakın. -
ConnectRetryCount = 3veConnectRetryInterval = 10: Sürücü,Open()sırasında geçici hataları yeniden dener ve bir sonraki komutta kesilen boşta bağlantıyı yeniden bağlar. Varsayılan sayı 1'dir. 10 saniye arayla yapılan üç deneme, daha uzun süren bir yeniden yapılandırma veya failover sürecini atlatabilir. Sürücü, yalnızca sunucu adı.database.windows.netgibi bilinen bir Azure SQL etki alanıyla bittiğinde 1 değerini 2’ye yükseltir; böylece özel DNS takma adı 1 değerini alır. -
openRetry: SqlConnection.RetryLogicProvider öğesine atanmış olarak,Open()çevresine üstel geri çekilme ekler. Sürücü,ConnectTimeoutsüresi dolunca iç yeniden denemelerini durdurur, bu yüzden en kötü durumdaOpenAsynchata vermeden önce, her biri 30 saniyeye kadar süren beş deneme ve buna ek olarak geri çekilme süresi olur. Her boşta yeniden bağlanma denemesi aynı zamandaopenRetryilkesinin tamamını çalıştırır ve bu politika denemelerini bitirdiğinde, boşta kurtarma sona erer. -
Sunucusuz otomatik duraklatma: Azure SQL Veritabanı serverless için
ConnectTimeoutdeğerini en az 60 saniyeye yükseltin. İlkiOpen(), veritabanı yeniden başlatılırken40613hatasıyla başarısız olabilir veopenRetrybunu yeniden dener. İstemci tarafında bir zaman aşımı,-2hatası olarak ortaya çıkar ve bu yeniden denenmez, bu yüzden her bağlantı denemesi sürdürmeden daha uzun sürmelidir. Daha fazla bilgi için bkz. Otomatik duraklatma ve otomatik devam. -
commandRetry: Yalnızca komutu yeniden yürütmek güvenliyse bunu SqlCommand.RetryLogicProvider öğesine ekleyin: okumalar, doğal bir anahtarla korunanMERGE, bir saklı yordam aracılığıyla yapılan upsert işlemleri ve diğer idempotent işlemler. İşlem içinde yeniden denemeyi atlar, bu yüzden uygulama kodu çoklu ifadeli işlemleri yeniden denemek zorundadır.ExecuteReaderveExecuteScalar, ilk sonuç kümesi başlamadan önce döndürülen hataları yalnızca yeniden dener.ExecuteNonQueryçağrının tamamını tekrar deniyor. -
Geçici hata listesi: Ayarlama
TransientErrorsyerleşik listenin yerini alır. Bunun yerine uzatmak için SqlConfigurableRetryFactory.BaselineTransientErrors kullanın (Microsoft.Data.SqlClient 7.0 ve sonrası) -
RetryingOlay: Retrying Her yeniden denemeden önce, yeniden deneme sayısı, sonraki gecikme ve şimdiye kadarki istisnalarla tetiklenir. Bunu ILogger veya telemetri işlem hattınıza yönlendirin. - İstisnalar: Yöntem istisnaları yakalamaz. Tükenmiş bir sağlayıcı, her denemedeki özel durumu AggregateException fırlatır. Geçici olmayan bir hata orijinal özel durum olarak yayılır. Çağıran, bunu istek bağlamının geri kalanıyla birlikte bir kez kaydeder.
-
İptal: CancellationToken sağlayıcının yeniden denemeler arasındaki beklemesini durdurur. Sürücünün
Openbeklemesini tek birConnectRetryIntervaldeneme içinde kesintiye uğratmaz. Daha fazla bilgi için asenkron programlama bölümünü inceleyin. - Sağlayıcı ömrü: Snippet, her aramada yeniden deneme sağlayıcılarını bağımsız kalmak için oluşturur. Bir uygulamada, onları bir kez oluşturun ve tekrar kullanın.
Bu yapılandırmanın her bölümü hakkında daha fazla bilgi için bkz:
- Bağlantı dizeleri
- Microsoft Entra kimlik doğrulama
- Şifreleme ve sertifika doğrulaması
- Yapılandırılabilir yeniden deneme mantığı
- Yüksek kullanılabilirlik ve olağanüstü durum kurtarma
Temel veri erişim görevlerini öğrenin
Bağlantı kurduktan sonra, aşağıdaki makaleleri sırayla kullanın:
- Bir komut çalıştırın, bir sonuç şekli seçin ve Transact-SQL çalıştırın (T-SQL).
- Parametreleri yapılandırın veritabanı sözleşmesine uyacak şekilde.
- SqlDataReader ile satırları ve birden çok sonucu işlemek için veri alın.
- Verileri depolanmış prosedürlerle değiştirin; çıktı parametrelerini ve döndürme değerlerini kullanın.
- Çağıran tarafından iptal ve sınırlı zaman aşımları eklemek için asenkron programlama ve iptal kullanın.
- Tekrar denemeler veya üretim teşhisi eklemeden önce hataları ve mesajları işleyin.
Temel özellikler
- Modern .NET desteği: Mevcut .NET ve .NET Framework sürümlerinde çalışır. Versiyon başına açıklama için bkz. Destek yaşam döngüsü.
-
Varsayılan olarak şifrelenmiş: TLS ile şifrelenmiş bağlantılar varsayılan
Encrypt=trueolarak kullanılır. TDS 8.0 şifrelemesi içinEncrypt=Strictayarlayın. - Microsoft Entra ID kimlik doğrulaması: Yönetilen kimlik, hizmet sorumlusu, etkileşimli, tümleşik, varsayılan kimlik bilgisi zinciri ve erişim belirteci akışları ile parolasız bağlantılar.
- Kerberos ve NTLM: şirket içi Active Directory ve eski senaryolar için tümleşik Windows kimlik doğrulaması.
- Always Encrypted: Hassas sütunlar için istemci tarafı şifreleme; yerinde işlemler için isteğe bağlı güvenli enklavlarla.
- Toplu kopyalama: SqlBulkCopy ile yüksek hacimli ekleme işlemleri.
- Bağlantı havuzu: Varsayılan olarak açık. Bir isteğe bağlı V2 havuzu değerlendirme aşamasında.
-
Bağlantı dayanıklılığı: Dahili bağlantı yeniden denemeleri (
ConnectRetryCountveConnectRetryInterval) ile bağlantılar ve komutlar için isteğe bağlı yapılandırılabilir yeniden deneme mantığı. -
Zengin SQL Server veri türleri:
datetimeoffset,sql_variant, JSON, vektör, mekansal, XML ve tablo değerli parametreler. - Teşhis: Olay kaynağı takibi, tanı sayacları, sağlayıcı istatistikleri ve özel bir sorun giderme rehberi.
-
Uygulama kimliği: Kütüphanenizi veya aracınızı SQL Server'a tanıtmak için
SqlConnection.RegisteredApplicationayarlayın (Microsoft.Data.SqlClient 7.1 ve sonrası).
Get started
| Makale | Description |
|---|---|
| SqlClient sürücüsünü kullanmaya başlayın | Bir proje kurun, veritabanı oluşturun, bağlantı kurun, sorgulayın ve bağlantı dayanıklılığı ekleyin. |
| Microsoft.Data.SqlClient’i yükleme, güncelleştirme ve dağıtma | NuGet paketlerini kurun, bir sürüm seçin, sürücüyü güncelleyin ve dağıtım çıktısını hazırlayın. |
| Destek yaşam döngüsü | Desteklenen sürücü sürümlerini ve destek tarihlerini gözden geçirin. |
| System.Data.SqlClient'tan Microsoft'a geçiş. Data.SqlClient | Paket referanslarını, isim alanlarını, yapılandırmayı ve sürücü davranışını güncelleyin. |
| Microsoft. Data.SqlClient isim alanı ve uyumluluğu | SqlClient'ın ADO.NET'i nasıl uyguladığını ve bunun System.Data.SqlClient, .NET ve SQL Server ile uyumluluğunu anlayın. |
| Microsoft'ta ne yenilikler? Data.SqlClient | Güncel sürümleri, büyük yükseltme değişikliklerini ve üst akış sürüm notlarını bulun. |
Yapılandırma ve bağlanma
| Makale | Description |
|---|---|
| Bir veri kaynağına bağlanın | Bağlantıları aç ve yönet, bağlantı durumu değişikliklerine yanıt ver. |
| Bağlantı dizeleri | Sunucu, veritabanı, kimlik doğrulama, şifreleme ve bağlantı davranışını yapılandırın. |
| Şifreleme ve sertifika doğrulaması | Şifreli bağlantıları ve sunucu sertifikası doğrulamasını yapılandırın. |
| SQL Server bağlantı havuzu | Fiziksel bağlantıları verimli şekilde yeniden kullanın. |
| Hataları ve mesajları ele alın | Hataları yakalayın ve bilgilendirici mesajlar alın. |
Doğrulama ve güvence
| Makale | Description |
|---|---|
| Microsoft.Data.SqlClient için güvenlik en iyi uygulamaları | Kimlik doğrulama, yetkilendirme ve uygulama güvenliği rehberliğini gözden geçirin. |
| Microsoft Entra kimlik doğrulama | Yönetilen kimlik, hizmet prensibi, şifre ve etkileşimli akışlarla bağlantı kurun. |
| Bağlantı bilgilerini koruma | Kimlik bilgilerini ve bağlantı ayarlarını uygulama kodundan uzak tutun. |
| Her Zaman Şifreli | Hassas sütun değerlerini veritabanı sisteminden koruyun. |
| Her Zaman Şifreli ile güvenli enklavlar | Güvenli bir enclave ile şifrelenmiş verilerde zengin işlemler yürütün. |
Veri alma ve güncelleme
| Makale | Description |
|---|---|
| Bir komutu çalıştır | Parametreli SQL ifadeleri ve saklanan prosedürleri çalıştırın. |
| Veri Adaptörleri (DataAdapters) ve Veri Okuyucular (DataReaders) | Sonuç kümelerini akışla veya bağlantısız veri yapılarını doldurun. |
| SqlBatch ile birden fazla komutu çalıştır | Sıralı bir komut koleksiyonu gönderin ve sonuçlarını işleyin. |
| Akış verileri | Büyük ikili, metin, XML ve JSON değerlerini değerin tamamını arabelleğe almadan aktarın. |
| İşlemler ve eşzamanlılık | Yerel ve dağıtık işlemler ile eşzamanlılık kontrolleri kullanın. |
| Veritabanı şema bilgisini alın | Şema koleksiyonlarını ve kısıtlamalarını keşfedin. |
| Toptan kopyalama işlemleri | Büyük veri setlerini verimli şekilde yükleyin.SqlBulkCopy |
| Tablo değerli parametreler | Parametrizlenmiş bir ifade veya saklanan prosedüre birden fazla satır gönderin. |
| Birden Çok Etkin Sonuç Kümesi (MARS) | Birden fazla toplu işlemi tek bir bağlantıda iç içe yürütün. |
Veri türleri
| Makale | Description |
|---|---|
| SQL Server veri tipi eşlemeleri | SQL Server tiplerini .NET ve System.Data.SqlTypes türlerine eşleyin. |
| JSON verileri | SQL Server json veri tipini gönderin ve alın. |
| Vektör verileri | Vektör değerlerini gönderip alın. |
| XML veri | XML değerlerini okuyun, yazın ve parametreleştirin. |
| İkili ve büyük değerli veriler | İkili, FILESTREAM ve büyük değerli verilerin akışını sağlama ve güncelleme. |
Güvenilirlik ve tanı
| Makale | Description |
|---|---|
| Yapılandırılabilir yeniden deneme mantığı | Sınırlı politikalarla geçici bağlantı ve komut hatalarını tekrar deneyin. |
| Yüksek kullanılabilirlik ve olağanüstü durum kurtarma | Erişilebilirlik grubu dinleyicileri ve failover ortaklarıyla bağlantı kurun. |
| SqlClient'da olay sayaçları | Aktif bağlantıları, havuzlu bağlantıları ve diğer sürücü metriklerini izleyin. |
| Olay kaynağı izlemeyi etkinleştir | Teşhis için ayrıntılı sürücü olaylarını kaydet. |
| SqlClient sorun giderme kılavuzu | Yaygın bağlantı ve sürücü sorunlarını teşhis edin. |
| Sorgu bildirimleri | Sorgu sonuçları değiştiğinde bildirimler alın. |
SQL Server özellikleri
| Makale | Description |
|---|---|
| SQL Server özellikleri ve ADO.NET | SqlClient üzerinden SQL Server'a özgü özelliklere göz atın. |
| Yerel Veritabanı | SQL Server Express LocalDB örneklerine bağlanın. |
| Veri bulma ve sınıflandırma | Sonuç kümelerinden hassasiyet sınıflandırma meta verilerini okuyun. |
Başvuru ve kaynaklar
| Makale | Description |
|---|---|
| Microsoft. Data.SqlClient API referansı | Sürücü için .NET API referansına göz atın. |
| AppContext anahtarları | Uyumluluk ve güvenlik davranışını yapılandırın. |
| Microsoft.Data.SqlClient GitHub deposu | Sürücü kaynak kodunu, sürüm notlarını ve örnekleri okuyun. |
| Microsoft.Data.SqlClient örnekleri | Sürücü API'leri için C# örneklerine göz atın. |
| .NET runtime GitHub repository | .NET çalışma zamanı kütüphanelerinin kaynağını okuyun. |
Özellik isteme
Bir özellik talebinde bulunmak için Microsoft.Data.SqlClient GitHub deposunda bir sorun açın.