pillinetwork hesabınızla giriş yapın.

Linq To SQL Temel İşlemler

Öncelikle bu yazının bir .NET 3.0+ makalesi olduğunu söylemek isterim.

Linq To SQL 2. makalem ile karşınızdayım. Birinci makalemi okumak isteynler buradan bakabilirler.

Linq to SQL ikinci makalemle sizlere daha temel bilgiler vermeye çalışacağım.

Bildiğimiz gibi veritabanı işlemleri genel olarak select, insert, update, delete işlemlerinden oluşmaktadır. İsterseniz bu işlemleri ve kısa detaylarını hemen anlatmaya başlayalım. Bunun için ilk önce veritabanımızın modelini çıkarmamız gerekiyor. Visual Studio'da projemize add new item diyerek yeni bir eleman ekleyerek işlemimize başlıyoruz. Buradan Linq To SQL Class dosya türünü seçiyoruz, dosya ismini veriyoruz "Ornek" ya da siz istediğiniz ismi kullanın ve sonra OK butonuna basıyoruz. Ardından Server Explorer penceresinden veritabanımızdaki işlem yapmak istediğimiz tabloları, açılan Ornek.dbml dosyamızın içerisine sürükleyip bırakıyoruz. Burada dikkat etmemiz gereken nokta veritabanında ilişkilerimizin doğru bir biçimde önceden verilmiş olması. SQL Server'da Database Diagram kısmından bu işlemleri daha önceden halletmiş olmanız gerekiyor.

========
Select İşlemi
========

Select Cümlesi

OrnekDataContext db = new OrnekDataContext();
var result = (from p in db.TabloIsmi_1 select p);

TabloIsmi_1 tablosundan tüm kayıtları seçmemiz için gerekli olan select cümlesi yukarıda. Peki koşul vermek istersek ne yapmalıyız?

Koşullu Select Cümlesi

OrnekDataContext db = new OrnekDataContext();
var result = (from p in db.TabloIsmi_1 where p.Alan_1 ==4 select p);

TabloIsmi_1 tablosundan Alan_1 değeri 4 olan kaydı seçiyoruz. Burada dikkat etmemiz gereken bazı noktalar var. Mesela Alan_1 alanını int bir veri ile karşlaştırmamız için bu alanın veritabanında da int türünde olması gerekmektedir.

Not : C#'da alışık olmadığımız "var" sözcüğü nitelediği değişkenin tipini eşitliğin sağındaki veri tipiyle aynı olacak şekilde ayarlar. Yani var i = 1; dediğimde i değişkeninin veri tipi int olmaktadır. Tahmin edeceğiniz gibi var sözcüğünü bir değişkene atama yapmadan kullanmak söz konusu değildir. Örneğin ; var i; dediğimizde hata alırız.

Koşul ve Sıralama İçeren Select Cümlesi

OrnekDataContext db = new OrnekDataContext();
var result = (from p in db.TabloIsmi_1 where p.Alan_1 >=4 orderby p.Alan_2 descending select p);

Yukarıdaki örnektede büyükten küçüğe olacak şekilde Alan_2 ye göre değerlerimizi sıralatıyoruz.

Select Cümlesi İçerisinden Belli Sayıda Kayıt Alma

Select cümlesi sonucundaki kümeden sadece 5 adet kayıt almak istersek aşağıdaki uygulamayı yapmamız gerekir.

OrnekDataContext db = new OrnekDataContext();
var result = (from p in db.TabloIsmi_1 where p.Alan_1 >=4 orderby p.Alan_2 descending select p).Take(5);

========
Insert İşlemi
========

Tablomuz yeni kayıt girerken yapacağımız işlem ise şudur. İlk önce tablonun sınıfından bir örnek oluşturulur. Bu sınıf biz dbml dosyasını oluşturduğumuz sırada oluşturulmuştu. Daha sonra oluşturulan örneğe de değerler atılarak kayıt işlemi yapılır. İsterseniz örnek olarak inceleyelim.

OrnekDataContext db = new OrnekDataContext();
TabloIsmi_1 ti = new TabloIsmi_1();
ti.Alan_1=15;
ti.Alan_2="Serkan";
db.TabloIsmi_1.InsertOnSubmit(ti);
db.SubmitChanges();

Böylelikle bir tabloya nasıl kayıt ekleyeceğimizi de görmüş olduk.

=========
Update İşlemi
=========

Tablomuzda var olan birkaydı update etmek istiyorsak eğer aşağıdaki uygulamayı yapmamız gerekir.

OrnekDataContext db = new OrnekDataContext();
var result = (from p in db.TabloIsmi_1 where p.ID == 1 select p).Single();
result.Alan_1 =5;
result.Alan_2 ="Mert";
db.SubmitChanges();

========
Delete İşlemi
========

OrnekDataContext db = new OrnekDataContext();
var result = (from p in db.TabloIsmi_1 where p.ID == 1 select p).Single();
db.TabloIsmi_1.DeleteOnSubmit(result);
db.SubmitChanges();

Evet basit olarak select, insert, update ve delete işlemlerinin uygulamalarını görmüş olduk. Yeni başlayanlar için iyi bir başlangıç olabileceğini düşünüyorum. Herkese başarılar.

/* halislus yazdı. 30 Haziran 2009 13:51. 6 yorum var */

Yorumlar

çgüzel derleme tşklrer

/* www.renkkat.blogspot.com www.dekorasyonel.blogspot.com Bloglarımızı beğendiyseniz takibe alırsanız seviniriz :) */

deneyeceğim, bu bana recordsetleri hatırlattı microsoft yine yapmış yapacağını :) neyse yenilik iyidir diyelim ama microsofttan korkuyorum çok çabuk teknoloji değiştiriyor.

Evet çok çabuk teknoloji değişiyor. Şimdilerde bir de MVC çalışıyorum o da farklı bir yaklaşım. Bakalım neler olucak asp.net'de bundan sonra.

/* Halislus */

hocam güzel örneği yaptım da nasıl while döngüsü gibi sokup verileri okuyacağız onu anlamadım. seçiyoruz ama gösteremiyoruz. açıklarsanız sevinirim.

Bir kaç yöntem var.

1. Eğer Repeater, DataList, GridView gibi kontroller kullanırsan yapman gereken sadece şu :

1
2
GridView1.DataSource=result;
GridView1.DataBind();

Eğer bu yöntemi uygularsan sanırım alanları nasıl göstermen gerektiğini biliyorsundur. Ama ben yine de basit bir örnek vereyim. Önce gridview'in autogeneratecolumns özelliğini false yap sonra etiketi içini şöyle doldur

1
2
3
4
5
6
7
<columns>
<TemplateColumn>
<ItemTemplate>
<%#Eval("Alan_1")%>
</TemplateColumn>
</ItemTemplate>
</columns>

2. Eğer döngü ile bunları bir yere yazmak istiyorsan yapman gereken şu:

1
2
3
4
5
6
string ltr="<table>";
foreach(var r in result)
{
ltr+= "<tr><td>"+r.Alan_1+"</td></tr>"
}
ltr+="</table>";

Sonra sayfadaki Literal kontrolünü ltr ile doldurursun.

Literal1.Text = ltr;

Kolay gelsin

/* Halislus */

Merhaba,
Bu dünyada biraz yeniyim aşağı konuda yardımcı olabilir misiniz?
1.İlişkili 2 tablodan bir linqtosql.dbml sınıfımı projeme ekliyorum (ör, categories, products tablolarını kullanıyorum)
2. a. form tarafında bir gride datasource olarak urunGetir() metodu üzerinden bir listeyi veriyorum.

b.metodda gidip linq ifademi yazıyorum. List dönüyor.

public partial class Form1 : Form { public Form1() { InitializeComponent(); } DataClasses1DataContext db = new DataClasses1DataContext();
private void simpleButton1_Click(object sender, EventArgs e)
{ gridControl1.DataSource=urunGetir(); }

private List"<"Product">" urunGetir()
{
var sonuc = from urun in db.Products
select urun;
return sonuc.ToList();
}

3.Buraya kadar iyi güzel hoş. Ama sonuç olarak Gridde products tablosunun kolonlarına ek olarak bir tane fazla bir kolon ortaya çıkıyor. İlişkinin olduğu tablonun (category) isminin olduğu bir kolon daha ekliyor. Bu kolondaki hücrelere de proje adı ve tablo adını yazıyor. (ProjeDeneme.Category)

Halbuki ben gridde böyle bir kolon istemiyorum. Linq neden ilişkiyi de bir kolon olarak dönüyor? Bunu nasıl önleyebilirim.

Not: Select new ile ilgili kolonları seçtiğimde ise anonim tip convert hatası alıyorum. Şöyle;

private List"<"Product">" urunGetir()
{
var sonuc = from urun in db.Products
select new {urun.CategoryID, urun.ProductID, urun.ProductName, urun.UnitPrice
};
return sonuc.ToList();

Hata:Cannot implicitly convert type 'System.Collections.Generic.List"<"AnonymousType#2">"' to 'System.Collections.Generic.List"<"WindowsFormsApplication1.Product">"'

üye olunpillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.

Bu Yazıyı Tutanlar

Bu yazıyı rapor et. Kural dışı içeriğe rastladığınızda editörlerimize rapor ederek müdahale edilmesini sağlayabilirsiniz. (Hangi durumlarda rapor edebilirim?)

Bu site

Nokta ve pilli ortak yapımı olan kodaman.org hep birlikte içerik üretip gelirini yazarları ile paylaştığımız kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.

pilliilan

son yorumlar

arama

pillinetwork