Bir yazılım geliştirici olarak, projelerinizin kurulum sürecini ne kadar otomatize ederseniz, kullanıcı veya sistem yöneticisi üzerindeki yükü o kadar azaltırsınız. Genellikle SQL Server Management Studio (SSMS) gibi harici yönetim panellerine girip manuel olarak veritabanı oluşturmaya alışkınızdır. Peki, projeniz ilk kez çalıştığında harici hiçbir araca ihtiyaç duymadan kendi veritabanını ve tablolarını arkada otomatik olarak inşa etseydi? İşte gerçek profesyonellik budur.
Bu rehberde, C# projelerinizde harici hiçbir araca dokunmadan, tamamen kod satırları üzerinden SQL Server veritabanı ve tablosu oluşturmayı öğreneceğiz. Hem geleneksel ve saf güç barındıran ADO.NET yöntemini hem de modern Entity Framework Core (EF Core) yaklaşımını ele alacağız.
1. Yöntem: ADO.NET ile Dinamik Veritabanı İnşası
ADO.NET, doğrudan SQL komutları çalıştırarak en yalın ve en hızlı şekilde veritabanı oluşturmanızı sağlar. Buradaki en kritik nokta Bağlantı Metni (Connection String) yönetimidir. Henüz var olmayan bir veritabanına doğrudan bağlanamazsınız. Bu yüzden ilk hamleyi SQL Server’ın ana sistem veritabanı olan master veritabanına yapacağız.
C# Kod Bloğu
Aşağıdaki kod, önce master veritabanına bağlanır, hedef veritabanının var olup olmadığını kontrol eder, yoksa sıfırdan oluşturur ve ardından yeni oluşan bu veritabanına bağlanarak tablonuzu inşa eder.
C#
using System;
using Microsoft.Data.SqlClient; // Projenize NuGet üzerinden eklemelisiniz.
class Program
{
static void Main(string[] args)
{
// 1. Adım: Master veritabanına bağlanıyoruz (Hedef veritabanı henüz var olmadığı için)
string anaBaglanti = "Server=localhost;Database=master;Trusted_Connection=True;TrustServerCertificate=True;";
string hedefVeritabani = "OtomatikOluşanVeritabani";
// Çalıştırılacak SQL Komutları
string veritabaniSorgusu = $@"
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = '{hedefVeritabani}')
BEGIN
CREATE DATABASE [{hedefVeritabani}]
END";
string tabloSorgusu = @"
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Kullanicilar]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Kullanicilar] (
[Id] INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
[Ad] NVARCHAR(50) NOT NULL,
[Soyad] NVARCHAR(50) NOT NULL,
[Eposta] NVARCHAR(100) NULL,
[KayitTarihi] DATETIME DEFAULT GETDATE()
)
END";
try
{
// Veritabanını oluşturuyoruz
using (SqlConnection baglanti = new SqlConnection(anaBaglanti))
{
baglanti.Open();
using (SqlCommand komut = new SqlCommand(veritabaniSorgusu, baglanti))
{
komut.ExecuteNonQuery();
Console.WriteLine($"Veritabanı '{hedefVeritabani}' başarıyla oluşturuldu veya zaten mevcut.");
}
}
// 2. Adım: Yeni oluşan veritabanına bağlanıp tabloları oluşturuyoruz
string yeniBaglanti = $"Server=localhost;Database={hedefVeritabani};Trusted_Connection=True;TrustServerCertificate=True;";
using (SqlConnection baglanti = new SqlConnection(yeniBaglanti))
{
baglanti.Open();
using (SqlCommand komut = new SqlCommand(taboSorgusu, baglanti))
{
komut.ExecuteNonQuery();
Console.WriteLine("Tablo ve şemalar başarıyla oluşturuldu.");
}
}
}
catch (Exception hata)
{
Console.WriteLine($"Bir hata oluştu: {hata.Message}");
}
}
}
2. Yöntem: EF Core ile Tek Satırda Veritabanı Oluşturma
Eğer projenizde bir ORM (Nesne İlişkisel Eşleme) aracı kullanıyorsanız, SQL komutları yazmanıza bile gerek yoktur. EF Core’un Önce Kod (Code-First) yaklaşımı sayesinde, uygulamanın ayağa kalktığı esnada veritabanını tek satır kodla tetikleyebilirsiniz.
Adım 1: Model ve Veritabanı Sınıflarının Tanımlanması
C#
using Microsoft.EntityFrameworkCore;
using System;
// Veritabanındaki tablomuzun karşılığı olan sınıf
public class Urun
{
public int Id { get; set; }
public string Ad { get; set; }
public decimal Fiyat { get; set; }
}
// Veritabanı Bağlantı Sınıfımız
public class UygulamaDbContext : DbContext
{
public DbSet<Urun> Urunler { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// Doğrudan hedef veritabanı adını yazıyoruz, EF Core arka planda master kontrolünü kendisi yapar.
optionsBuilder.UseSqlServer("Server=localhost;Database=OtomatikEfDb;Trusted_Connection=True;TrustServerCertificate=True;");
}
}
Adım 2: Sihirli Dokunuş (EnsureCreated)
Uygulamanızın başlangıç noktasına ekleyeceğiniz tek bir metot, veritabanı sunucusunu kontrol eder; veritabanı yoksa modellerinize bakarak otomatik olarak oluşturur.
C#
class Program
{
static void Main(string[] args)
{
using (var bağlam = new UygulamaDbContext())
{
Console.WriteLine("Veritabanı kontrol ediliyor...");
// Sihirli dokunuş: Veritabanı yoksa oluşturur, varsa hiçbir şey yapmaz.
bool olustuMu = bağlam.Database.EnsureCreated();
if (olustuMu)
{
Console.WriteLine("Veritabanı ve tablolar ilk defa otomatik olarak oluşturuldu!");
}
else
{
Console.WriteLine("Veritabanı zaten mevcut, işlem atlandı.");
}
}
}
}
💡 Profesyonel İpucu: Eğer projenizde ilerleyen zamanlarda veritabanı değişikliklerini (yeni kolon ekleme, tip değiştirme) takip etmek istiyorsanız,
EnsureCreated()yerinebağlam.Database.Migrate()metodunu kullanmalısınız.EnsureCreatedsadece ilk kurulumu yapar, sonraki güncellemeleri takip etmez.
Hangi Yöntemi Seçmelisiniz?
| Özellik | ADO.NET (Saf SQL) | EF Core Yöntemi |
| Hız ve Performans | En yüksek seviyede. | Orta düzeyde (Arka planda çeviri yapar). |
| Kod Yönetimi | SQL sorguları yazmayı gerektirir. | Tamamen C# sınıfları ile kontrol edilir. |
| Kullanım Senaryosu | Hafif, hızlı ve bağımsız araçlar için ideal. | Büyük, kurumsal ve nesne odaklı projeler için mükemmel. |
Projenizin ihtiyacına göre yönteminizi seçin, kodunuzu yazın ve uygulamanızın kendi kendine veritabanı kurma gücünün tadını çıkarın!

