mehmetduran.com - Paylaşmak Güzeldir...
Asp.net'te Veritabanına Kayıt Ekleme Ardından Primary Alan Değerini Alma
Bu yazımda veritabanına kayıt ekledikten hemen sonra yeni eklenen verinin primary alan değerini almayı göstereceğim. Bu olayı hem Ms Sql hem de Mysql veritabanları için göstereceğim. Bu şekilde bir kullanım ile fazla kod yazmaktan ve fazla işlem yapmaktan kurtularak, performans kazancı sağlayacağız. Kendi bloğumda yaptığım sorgulamalarda bu türlü bir işlem için ekstra kod yazdığımı ve sorgulama yağtığımı farkettim. Bu çözüm ile de fazla kodlardan ve sorgulamalardan kurtuluyorum. Böylece daha performanslı bir işlem yapmış olacağız. Şimdi bu durumu hem Ms Sql hem de Mysql ile nasıl yapacağımıza bakalım.

Öncelikle Mysql için bu durumu nasıl yapacağımıza bakalım. Aşağıdaki gibi bir kodlama ile veri ekleyip, ekledikten sonra yeni eklenen verinin primary alan değerini alıyoruz.

    //verimizi ekliyor ve primary alan değerini alıyoruz.
    MySqlCommand komut = new MySqlCommand("insert into meslekler (meslek) values (@meslek); select @@identity;", baglanti);
    komut.Parameters.AddWithValue("@meslek", "deneme");
    baglanti.Open();
    int sonuc = (int)(long)komut.ExecuteScalar();
    Response.Write(sonuc.ToString());
    baglanti.Close();

Ms Sql için aynı sorgulama geçerli. Fakat Ms Sql'de farklı bir yol daha var. Aslında aynı yol ama farklı bir yazımı var. Ms Sql'de yer alan fonksiyonu kullanarak elde etmek istediğimiz değeri elde edebiliyoruz. Bunun için yapacağımız kodlama aşağıdaki olmalı.

    //verimizi ekliyor ve primary alan değerini alıyoruz.
    SqlCommand komut = new SqlCommand("insert into dersler_tablosu (dersler) values(@dersler); select @@identity;", baglanti);
    //Ms Sql için farklı bir sorgu olarak aşağıdaki sorguyu kullanabiliriz.
    // "insert into dersler_tablosu (dersler) values(@dersler); select scope_identity();"
    komut.Parameters.AddWithValue("@dersler", "deneme");
    baglanti.Open();
    int sonuc = Convert.ToInt32(komut.ExecuteScalar());
    Response.Write(sonuc.ToString());
    baglanti.Close();

Görüldüğü gibi işlemlerimizi bu şekilde yapabiliyoruz. Aslında bu işleme gerek kalmadan veritabanı içinde tanımlayacağımız trigger'lar ile bu işlemleri rahatlıkla yapabiliriz. Ancak trigger kullanmıyor isek bu şekilde değerleri elde edip kullanabiliriz. Böylece daha az kodlama ve daha az sorgulama ile yapacaklarımızı yapıyoruz. Sonuçta da performans artışı olacaktır.

İyi Çalışmalar.
Mehmet Duran 07 Mart Cumartesi 2009 10 23970 5,0
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar Sql'de Datetime Alanından Yılı ve Ayı Belirleme Fonksiyonu Imagine Cup 2009 Final Yarışması Yoğunluk ve Yaşanan Problemler İnner Join ile Tabloları Bağlama 'Mehmet' İsminin Anlamı Nedir?
Yorumlar
Yorum Yaz
RSS Yorum Takibi
phrozen 14 Mart Cumartesi 2009 22:51 #1
ADO.net için benzer olayı nasıl yapabiliriz?
Mehmet Duran 14 Mart Cumartesi 2009 23:03 #2
ADO.Net derken tam olarak ne demek istedin. Çünkü buradaki sorgulama standart.
Serdar BÖLÜM 17 Mart Salı 2009 19:55 #3
SCOPE_IDENTITY() yöntemi ile de aynı işlem yapılabiliyor ama bu yöntem de güzelmiş. Teşekkürler...
Mehmet Duran 17 Mart Salı 2009 20:11 #4
Evet. İkinci kod bölümünde de belirtmiştim. Ms sql`de scope_identity() ile de bu işlemi yapabiliyoruz.
Atilla 04 Aralık Cuma 2009 23:17 #5
Access veritabaninda bu hatayi veriyor: Characters found after end of SQL statement.
Mehmet Duran 04 Aralık Cuma 2009 23:32 #6
Merhaba. Access'te bu tür işler biraz zahmetli. Ancak bu sorgulamayı Access ile yapmak mümkün. Buradaki cevaplarda nasıl yapılacağı belirtilmiş. Umarım yardımcı olur.
Osman ÖZTÜRK 10 Ocak Pazar 2010 21:46 #7
Ben bu yöntemi bilmiyordum açıkcası. çok zahmetli bir iş oluyordu id 'ye ulaşmak. Allah razı olsun verdiğin bilgiden solayı. işin rast gitsin hep.
sedatt 02 Şubat Salı 2010 12:14 #8
Süper teknik dediğin gibi daha az kod ile performans artışı sağlıyoruz.
Yaptığım bi projede bir tabloya veri girdikten sonra max_id ile o tablonun girdiğim en son idsini alıp başka tabloya ilişkili veri ekliyordum ama birden fazla kişi aynı işlemi yapabileceği için benimle aynı saniyede veri ekleyen biri olursa max_id benim idmi değil onun idsini alabileceği için hata olmasından korkuyordum ama bu kod gayet işime yaradı teşekkürler.
hakan 05 Nisan Salı 2011 01:34 #9
çok güzel hatta süper peki nereden nasıl ekliyoruz? buna nasıl bir cevap yazacaksınız?
Mehmet Duran 08 Nisan Cuma 2011 22:58 #10
@hakan, veritabanına nerede, nasıl kayıt ekleniyorsa ihtiyaca göre orada kullanırsın.
İsim :
Site :
Yorum :

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.
Hizmet amaçlı işler başarıya, kar amaçlı olanlar ise başarısızlığa yöneliktir.
Bölümler
Yazılar
Arşiv
Arama
Linkler
Site İçi Arama
Son Zamanlarda Ne Yapıyorum ?
İstatistikler - Araçlar - Reklam
İstatistikler
Sayaç
Mehmet Duran | mehmetduran.com | Copyright © 2009