Site icon Akbuz

C# Kod ile Veritabanı Oluşturma

C# Proje İçerisinden Kodlarla Veritabanı Oluşturma

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() yerine bağlam.Database.Migrate() metodunu kullanmalısınız. EnsureCreated sadece ilk kurulumu yapar, sonraki güncellemeleri takip etmez.

Hangi Yöntemi Seçmelisiniz?

ÖzellikADO.NET (Saf SQL)EF Core Yöntemi
Hız ve PerformansEn yüksek seviyede.Orta düzeyde (Arka planda çeviri yapar).
Kod YönetimiSQL sorguları yazmayı gerektirir.Tamamen C# sınıfları ile kontrol edilir.
Kullanım SenaryosuHafif, 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!

Exit mobile version