LINQ to SQL - SP ve Sorgular

Serhat tarafından yazılmıştır. 6. Ocak 2009 13:10

Visual ortamına entegre edilen LINQ(Language Integrated Query)'den biraz bahsetmiştik.LINQ to SQL ise kod yazarken T-SQL yazım kurallarına benzer şekilde veritabanında fazla uğraşmadan kodlama alanında nesneler üzerinden sorgu atabilmesini sağlar.Bu işlemler stored procedure veya basit birer select sorguları gibi hepsi dahildir bu işleme.

Örneğimizin arayüzü aşağıdaki gibidir.Öğrenciler butonuna basıldığında veritabanımızdaki tüm öğrencileri getirecektir.Öğretmenler butonuna tıklandığında da öğretmenleri getirecektir.Alt tarafta bulunan Kayıt Getir butonu ise TextBox'ta belirtilen ID'ye ait öğrenciyi getirecektir.Tüm sorgu işlemlerini Visual IDE'sinde yapacağız.Tüm bunları LINQ sorgularıyla yapacağız.Çok büyük kolaylık  gerçekten:)

LINQ to SQL

Normal bir Windows projesi açıyoruz 3.5 Framework destekli ve daha sonra Solution Explorer'a sağ tıklayıp  Add / New Item diyoruz ve karışımıza Itemların olduğu bir form çıkacaktır aşağıdaki gibi.Buradan LINQ to SQL Classes'ı seçerek veritabanımızın üzerinde işlem yapacağımız genel bir isim veriyoruz.Örneğimizde Okul denmiştir.

LINQ stored procedure

Ekledikten sonra karşımıza düz bir zeminde ikiye bölünmüş bir ekran gelecektir.Burada sol tarafta tablolarımız sağ tarafda ise metotlar halinde Stored Procedure'lerimiz bulunacaktır.Veritabanımızda tabloları eklemek için  Server Explorer'dan (yoksa View / Server Explorer ) Data Connections'a sağ tıklayıp Add Connection diyoruz.

LINQ

Add Connection dedikten sonra ekrana gelen pencereden Server Name'ini seçip alt tarafta bulunan Connect to Database diye belirtilen alandan ise üzerinde işlemler yapmak istediğimiz database'i seçiyoruz.Ok dedikten sonra aşağıdaki Server Explorer'a bağlantı eklenip eklenen bağlantıdan sorgulamak istediğimiz tabloları ve stored procedure'leri alana sürüklüyoruz.Görüldüğü gibi Stored Procedure'lerimizi metot haline dönüşmektedir ekranın sağ tarafında.Sol tarafta ise tablolarımız bulunmaktadır.

LIQN sorgu

Artık programlama alanına geçip gerekli işlemleri yapabiliriz.Yukarıdaki resimde OgrenciGetir diye belirtilen SQL Stored Proceduremiz aşağıdaki gibidir.

create Proc OgrenciGetir
(
@id int
)
AS
    Select * from ogrenciler where id=@id

Programımızın kodları ise aşağıdaki gibi olacaktır.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace LINQtoSQLOrnegi
{
    public partial class Form1 : Form
    {
        //Global olarak heryerden erişmemiz için Solution Explorerda da gözüktüğü gibi okul veritabanımızı örneklememiz lazım OkulDataContext class'tan.Oluşturulan bu okulDB üzerinden tüm tablolarımıza erişebilicez sorgu esnasında
        OkulDataContext okulDB = new OkulDataContext();

        public Form1()
        {
            InitializeComponent();
        }

        //Öğrenciler butonu
        private void btnOGrenciler_Click(object sender, EventArgs e)
        {
            //görüntülemek istediğimizi dataGrid'imizin datasource'una LINQ sorgumuzu yazıyoruz.Bu sorgu ogrenci'de bulunan tüm tablolara erişmemizi sağlayıp grid'de gösterir bize.
            dataGridView1.DataSource = from ogrenci in okulDB.ogrencilers
                                       select new{
                                       ID = ogrenci.id,
                                       AD =ogrenci.ad,
                                       SOYAD =ogrenci.soyad,
                                       NUMARA = ogrenci.numara
                                       };
        }

        private void btnOgretmenler_Click(object sender, EventArgs e)
        {
            //Bu linq sorgusu çalıştığında ise aynı öğrenciler sorgumuzda olduğu gibi tablodaki tüm öğretmenleri datagrid'de listeliyecektir.
            dataGridView1.DataSource = from ogretmen in okulDB.Ogretmenlers
                                       select new{
                                           ID = ogretmen.ogretmenID,
                                           AD = ogretmen.ogretmenAdi,
                                           SOYAD = ogretmen.ogretmenSoyad
                                       };
        }
       
        //KAyıt getir butonu
        private void btnKayitGetir_Click(object sender, EventArgs e)
        {
                //OgrenciGetir adındaki SP'miz int tipinde ID alacağından textBox'tan gelen değeri parse metodu ile int tipine çevirip SP sonucu dönen kayıtı var tanımlı SP değerine sonucu atıyoruz.Daha sonra bu sonucuda grid'imizin datasource'una atadığımızda belirttiğimiz ID veritabanında var o ID'ye ait bilgilerin bize döndüğünü görebiliriz.
                var SP = okulDB.OgrenciGetir(int.Parse(txtKayit.Text));
                dataGridView1.DataSource = SP;
        }
    }
}

Resimdede görüldüğü gibi Öğrenciler butonuna basıldığında o tablodaki tüm kayıtların bize gelmesini sağladık.

Mesela Öğrenciler butonuna basıldığında tüm kayıtların değilde ID'si 5 ten büyükleri getirmek isteseydik sorgumuzu aşağıdaki şekilde düzenleyecektik;

            dataGridView1.DataSource = from ogrenci in okulDB.ogrencilers
                                       where ogrenci.id > 5
                                       select new{
                                           ID = ogrenci.id,
                                           AD = ogrenci.ad,
                                           SOYAD = ogrenci.soyad,
                                           NUMARa = ogrenci.numara
                                       };

Öğrenci ID'leri 1 veya 2 olanları getirmek isteseydik ve bu kayıtlarıda alfabetik olarak gelsin deseydik aşağıdaki gibi LINQ sorguzu yazacaktık ;


            dataGridView1.DataSource = from ogrenci in okulDB.ogrencilers
                                       where ogrenci.id ==1 || ogrenci.id==2
                                       orderby ogrenci.ad ascending
                                       select new{
                                           ID = ogrenci.id,
                                           AD = ogrenci.ad,
                                           SOYAD = ogrenci.soyad,
                                           NUMARa = ogrenci.numara
                                       };

LINQ to SQL örneğini indirmek için

Bu şekilde hiç SQL alanına girmeden programlama alanında kolayca istenilen sorguların yazılabildiğini gördük.C# tarafında böyle bir yapıyı kullanmak veritabanı programlama yaparken oldukça işe yarayacaktır :)

Faydalı olması dileğiyle iyi çalışmalar herkese

Serhat TAŞ

1 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler: , ,

C# & .NET

Yorumlar

Yorum ekle


(Gravatar simgesini gösterecek)  

biuquote
  • Yorum
  • Canlı önizleme
Loading



Powered by BlogEngine.NET 1.4.5.0
Bu tema Mads Kristensen tarafından yapılmıştır ve Türkçeleştirilmesi Blog Engine Türkiye ekibi tarafından yapılmıştır.

Son Yorumlar

Comment RSS

Yasal Uyarı

Bu sitede sunulan tüm bilgi ve dökümanların kullanımından ve sitede yapılan kullanıcı yorumlarından (siyasi içerik,hakaret vb.) doğacak sorunlardan yazar sorumlu tutulamaz. 

İçeriğin kaynak belirtilmeden kopyalanması yasaktır !

SERHAT TAŞ

© Copyright 2010