C# SQL Bağlantı Eğitimi: Dapper + SQL Server Veritabanı Açıklandı
[[academy-video-youtube({"vid": "WGbTM198-eA", "start_time": "0", "title": "C# Uygulaması Baştan Sona Ders 10 - SQL Bağlantısı", "creator": "Tim Corey", "length": "1h 15m 23s"})]]
Tim Corey'nin "C# Uygulaması Baştan Sona" serisinde 10. derste, bir C# uygulamasını SQL Server veritabanına Dapper kullanarak nasıl bağlayacağını açıklıyor. Önceki derste, uygulama sadece SQL ile konuşuyormuş gibi yapan sahte bir veri erişim katmanı kullanıyordu. Bu videoda, Tim bu yer tutucu kodu gerçek SQL bağlantısı mantığıyla değiştiriyor ve temiz, ölçeklenebilir ve kolay bakım yapılabilir bir veritabanı bağlantısını nasıl kurduğunu gösteriyor.
Bu makale, Tim'in kapsadığı anahtar kavramları bölüyor ve bunları C# SQL bağlantı veya SQL Server'a yeniyseniz bile mantıklı bir şekilde açıklıyor.
Proje Kurulumu ve Temizliği
Tim, çözüm yapısını gözden geçirerek ve önceki derste yapılan değişiklikleri doğrulayarak başlıyor. Program.cs'de, hem SQL Server hem de metin dosyası veritabanlarına bağlanmak için kod eklediğini ve başlangıç formunu "Ödül Yarat" formuna değiştirdiğini açıklar, böylece veritabanı bağlantısını hemen test edebilir.
Daha sonra proje yapısını iki klasör oluşturarak temizliyor:
Modeller
- Veri Erişimi
Bu, kaynak kod işlevselliğini etkilememekle birlikte, organizasyona yardımcı olduğunu belirtiyor. Bir projeye sonra döndüğünüzde, temiz yapı ve tutarlı adlandırma bakımını ve genişletilmesini çok daha kolay hale getirir.
Neden Dapper?
Tim, SQL bağlantıları için ORM (Nesne-İlişkisel Dönüştürücü) olarak Dapper kullanacağını açıklıyor. Dapper, ham SQL komutları ile Entity Framework gibi üst seviye ORM'ler arasında yer alır.
Tim, Dapper'ı tercih ediyor çünkü:
Ham ADO.NET kadar hızlı
Entity Framework'ten daha basit
- Gereksiz karmaşıklığı ve ağır şablon kodunu önler
Entity Framework'ün, özellikle küçük uygulamalarda daha yavaş ve daha ağır olabileceğini belirtir. Projesi için Dapper, performans ve sadelik arasında doğru dengeyi sağlar.
Dapper'ın Kurulumu
Tim, Visual Studio'daki NuGet Paket Yöneticisi üzerinden Dapper kurulumunu gösterir. Kurulumdan sonra, Dapper proje referanslarında görünür ve SQL bağlantı kodu temiz ve okunabilir hale gelir.
Bağlantı Dizgesi Ekleme
Dapper kullanmak için bir bağlantı dizesine ihtiyacınız var. Tim, bunu kütüphane projesine değil, UI projesinin app.config dosyasına ekler, çünkü kütüphane bir DLL'dir ve kendi yapılandırması yoktur.
Bağlantı dizesi şunları içerir:
Veri Kaynağı (sunucu adı veya makine alan adı)
İlk Katalog (veritabanı adı)
Entegre Güvenlik (Windows Kimlik Doğrulaması)
Bağlantı Zaman Aşımı
- Kullanıcı Kimliği ve Şifre (Windows Kimlik Doğrulaması kullanılmıyorsa)
Tim'in örneğinde, güvenilir bağlantı kullanır, yani Windows kimlik doğrulaması:
Data Source=SQL2016;Initial Catalog=Tournaments;Integrated Security=True;Bu, SQL Server kullanıcı kimlik bilgilerinin dosyada saklanmasını önlediğini vurgular.
GlobalConfig: Bağlantı Dizgesi Alma
Bağlantı dizgesini almak için Tim, GlobalConfig içine bir yöntem ekler:
public static string GetConnectionString(string name)
{
return ConfigurationManager.ConnectionStrings[name].ConnectionString;
}Bu yöntem, bağlantı dizgesini yapılandırma dosyasından çeker ve döndürür. Tim ayrıca gerekli System.Configuration referansını ekler.
SQL Bağlantısı Oluşturma
Tim, yer tutucu kodu çıkartır ve bir SqlConnection oluşturur:
using (IDbConnection bağlantı = new SqlConnection(
GlobalConfig.GetConnectionString("tournaments")))
{
// SQL mantığı buraya
}Farklı veritabanı türlerini (SQL veya metin dosyası) çekirdek kodunu değiştirmeden değiştirebilmesi için bir IDbConnection arayüzü kullanır.
using bloğu önemlidir çünkü kod bloğundan çıktığında bağlantının otomatik olarak kapanmasını sağlar. Bu, bağlantı havuzunu tüketen veya veritabanı sunucusunda hatalara neden olabilecek açık bağlantıları önler.
Saklı Prosedür Oluşturma
Tim, C# içinde ham SQL yazmak yerine saklı bir prosedür kullanır. Bu, SQL mantığını veritabanında tutar ve SQL enjeksiyonu gibi riskleri azaltır.
Adı verilen bir saklı prosedür oluşturur:
dbo.SP_Prizes_InsertBu prosedür, ödül tablosuna uygun parametreler alır:
@KonumNumarası
@KonumAdı
@ÖdülMiktarı
@ÖdülYüzdesi
- @ID (çıktı)
Çıktı parametresi, yeni oluşturulan ID'yi şu şekilde döndürür:
SELECT @ID = SCOPE_IDENTITY()Bu, yeni kaydın ID'sinin C# uygulamasına döndürüleceğini garanti eder.
Dapper'da Dinamik Parametreler
C#'a geri döndüğümüzde, Tim, saklı prosedüre parametreler göndermek için Dapper'ın DynamicParameters'ini kullanır:
var p = new DynamicParameters();
p.Add("@KonumNumarası", model.KonumNumarası);
p.Add("@KonumAdı", model.KonumAdı);
p.Add("@ÖdülMiktarı", model.ÖdülMiktarı);
p.Add("@ÖdülYüzdesi", model.ÖdülYüzdesi);
p.Add("@ID", 0, dbType: DbType.Int32, direction: ParameterDirection.Output);ID Çıktı olarak işaretlenmiştir ve Dapper, parametre eşleştirmesini yönetir.
Saklı Prosedürü Çalıştırma
Saklı prosedürü çalıştırır:
connection.Execute("dbo.SP_Prizes_Insert", p, commandType: CommandType.StoredProcedure);Execute, bir Ekle işlemi gerçekleştirdiği ve bir SELECT ifadesi gibi satır döndürmediği için kullanılır.
Çalıştırıldıktan sonra, kod ID'yi alır:
model.ID = p.Get<int>("@ID");
return model;Test ve Sonuçlar
Tim, uygulamayı çalıştırır, formu doldurur ve Ödül Oluştur'a tıklar. Veri, SQL Server veritabanına başarıyla eklenir. Her ikisini de test eder:
Ödül Miktarı
- Ödül Yüzdesi
Her ikisi de çalışır, veritabanı bağlantısının ve saklı prosedürün doğru bir şekilde çalıştığını kanıtlar.
Tasarım Sorunu: Birden Çok Veri Bağlayıcı (1:01:50)
Tim, bir tasarım sorununu vurgular: SQL ve metin dosyası bağlayıcılarını aynı anda kullanmak, tutarsız ID'lere neden olur.
Bu yüzden sadece bir bağlayıcının aynı anda çalışmasını sağlamak için tasarımı değiştirir. Bir enum ekler:
VeritabanıTürü
{
SQL,
MetinDosyası
}Bu, uygulamanın her zaman tutarlı bir veritabanı türü kullanmasını sağlar ve farklı kaynaklardan gelen veritabanı verilerinin karışmasını önler.
Sonuç
Tim Corey'nin Ders 10, C# uygulamasını Dapper kullanarak SQL Server'a bağlamanın gerçek dünya yaklaşımını gösterir. Ele alınan konular:
Bağlantı dizgesi ekleme
SqlConnection kullanma
Bağlantıları güvenli bir şekilde açma ve kapama
Saklı prosedürler kullanma
SQL enjeksiyonunu önleme
- Çoklu veri kaynakları için uygun mimari
C# ile bir SQL Server veritabanına temiz, hızlı ve sürdürülebilir bir şekilde bağlanmanın bir yolunu istiyorsanız, bu ders mükemmel bir rehberdir.

