C# ve SQL Database Bağlantısı ilk başlayanlar için gerçekten karmaşık olabiliyor. Özellikle kaynaklar farklı anlatıyor ve bir bağlantı yöntemi kafamızda oturmamışken, başka yeni kod yapıları kafamızı gerçekten karıştırıyor, bu işten soğutabiliyor. Yazılım işini öğrenmek isteyen veya halihazırda işin içinde olanlar zaman zaman bir konuda kaynak aradıklarında, bazen işin içinden çıkamaz bir duruma düşebiliyoruz. Daha önce biraz PHP ile geliştirme yapmış biri olarak, SQL bağlantısına oradan aşinayım ancak C#’da durumlar biraz değişiyor.
Youtube üzerinden bir eğitim seti takip ediyorum ve C# ile SQL bağlantısı konusuna geldiğimde (ilgili videoyu izlediğimde desem daha doğru olur) tosladım. Biraz google, biraz yapay zeka derken konuyu anladım ve anladığım şekilde burada Türkçe bir dökümana çevirmeye karar verdim. Umarım basit anlatım olur ve bir çok kişinin işini görür.
Öncelikle PHP gibi bir his vermemesinin nedeni, C#’ın biraz daha “tip güvenli” ve “nesne yönelimli” çalışmasıdır. Ancak biraz kafa yorunca bunun da aynı derecede kolay olduğunu anlıyoruz. Konuya başlamadan önce C#’da SQL bağlantısı için 4 farklı yöntemi açıklamaya çalışacağım. Ayrıca bu 4 yöntem ile ilgili kullanım kolaylığı/performans ile ilgili bir bilgi paylaşmayı da planlıyorum.
Diğer C#’da SQL bağlantı yöntemlerini de Csharp kategorisinde paylaşacağım, ilgili kategoriden ulaşabilirsiniz.
Ben bir adet database oluşturdum. Table_Product tablomda yemek isimler ve fiyatları mevcut. Anlatımları bu tablo üzerinden örneklendireceğim.

C#’da SQL bağlantısı için kullanılan en temel ve doğrudan yöntem budur. Bu yöntemin genel mantığı “SQL’e bir soru soruyoruz, gelen cevapları satır satır alıp kullanıyoruz.”
using System;
using System.Data.SqlClient;
class Program
{
static void Main()
{
SqlConnection connection = new SqlConnection("Data Source=.;Initial Catalog=MyDatabase;Integrated Security=True"); //Bir bağlantı nesnesi oluşturur.
connection.Open(); //Veritabanı bağlantısını aktif eder.
SqlCommand command = new SqlCommand("SELECT * FROM Table_Product", connection); //Bir SQL komutu hazırlar.
SqlDataReader reader = command.ExecuteReader(); // command komutunu(sorgusunu) çalıştırır ve sonucu reader nesnesine aktarır.
//reader.Read() ile satır varsa true, yoksa false döner.
while (reader.Read())
{
Console.WriteLine($"{reader["ProductName"]} {reader["ProductPrice"]}");
}
reader.Close(); //Reader nesnesini kapatır.
connection.Close(); //Veritabanı bağlantısını kapatır.
}
}
Kod Çıktısı:
Mercimek 60,00
Yayla Çorbası 65,00
Tavuk Suyu Çorba 70,00
Spagetti 50,00
Steak Burger 100,00
Cheese Burger 120,00
Sütlaç 40,00
Profiterol 35,00
Kızarmış Tavuk 85,00
Pilav 40,00
Data Source=
ile başlayan sorgu stringimizde nokta (.) işareti, local’de olduğunu belirtiyor ve bu kısmın devamına Server Name kısmını girmemiz gerekiyor. Noktayı silip direk bilgisayarınızdaki Server Name yazabilirsiniz. Microsoft SQL Server Management Studio uygulamasına girerek, aşağıdaki adımları takip ediniz. Server Name’i bulacaksınız.
NOT: Eğer Server Name çıkmıyor ise SQL Server kurulumu yapmamış olabilirsiniz.
O yüzden BURADAN Server kurulumunu indirip, kurunuz.

Buraya kadar olan kısımda başta benim de anlamadığım reader.Read() ifadesi var.
reader.Read()
tam olarak ne yapıyor?
SqlDataReader reader = command.ExecuteReader();
şeklinde bir tanımlama yapmıştık. Burada SqlDataReader sınıfından bir nesne örneği oluşturuyoruz ve bunu reader’a atıyoruz.
while (reader.Read())
{
Console.WriteLine($"{reader["ProductName"]} {reader["ProductPrice"]}");
}
Bu nesne, veritabanından gelen satırları sırayla okumamızı sağlıyor. reader.Read()
her çağrıldığında, bir sonraki satıra geçer.
Eğer geçerli bir satır (veri) varsa -> true
döner ve bu bilgiye ulaşabiliriz.
Eğer geçerli bir satır (veri) yoksa -> false
döner ve yukarıdaki while
döngüsü biter.
Yöntem 1 Satır Satır Açıklama:
Kod | Ne yapıyor? | Neden kullanıyoruz? |
---|---|---|
SqlConnection connection = new SqlConnection("connection_string"); | Bir bağlantı nesnesi oluşturur. | Veritabanına bağlanabilmek için gerekiyor. |
connection.Open(); | Veritabanı bağlantısını aktif eder. | Komut gönderebilmek için bağlantının açık olması lazım. |
SqlCommand command = new SqlCommand("SELECT * FROM Table_Product", connection); | Bir SQL komutu hazırlar. | Veritabanına hangi işlemi yapacağını söylemek için kullanıyoruz. |
SqlDataReader reader = command.ExecuteReader(); | Komutu çalıştırır, sonucu reader nesnesine aktarır. | Verileri satır satır okumak için gerekli. (Reader ➔ Sadece ileriye doğru satır okur.) |
while (reader.Read()) | Reader’dan bir sonraki satıra geçer. Satır varsa true , yoksa false döner. | Satır satır verileri okuyabilmek için döngü kuruyoruz. |
reader["ProductName"] | O anki satırdan ‘ProductName’ kolonunun değerini alır. | Satır içindeki belirli bir sütuna erişmek için. |
reader.Close(); | Reader nesnesini kapatır. | Hafızayı boşaltır ve bağlantıyı serbest bırakır. |
connection.Close(); | Veritabanı bağlantısını kapatır. | Bağlantıyı kapatmazsan, sunucu üstünde boşuna yer kaplarsın. Performans ve güvenlik için önemli. |
Bu yöntemde (Reader) veri üzerinde dolaşabilirsin ama çok kısıtlı:
- Sadece ileri gidebilirsin (satır satır).
- Satırın içeriği değiştirilemez.
- Geri dönemiyorsun, arama/sıralama yapamıyorsun.
C# ve SQL Database Bağlantısı en temel hali ile bu şekilde yapılıyor. Bu içerik benim için sürekli referans olacak ve elimden geldiğince güncellemeye çalışacağım. İçeriğe katkı sağlamak isterseniz, yorum yazmaktan çekinmeyiniz.
Gönderilere yorum yazabilir, linkedin veya @huseyineskan instagram hesabımdan benimle iletişime geçebilirsiniz.
Yazılım kategorisine buradan göz atabilirsiniz.