Pythontr

husonet | Tarih: 20.06.2017

C# scope_identity kullanımı

C# Sql Son Eklenen Kaydın ID si nasıl alınır?

Merhabalar Arkadaşlar, (Not:Lütfen öneri ve sorularınızı yorum olarak atınız. Teşekkürler şimdiden)



C# programlama dili ile herhangi bir platformda uygulama gerçekleştirmeyiz. Web, windows service, windows application farketmeksizin insert, update ve select işlemleri kullanılmaktadır. Bu makalemde ise insert işleminde son eklenen verinin ID'sini getirmek için kullanılan scope_identity kullanımından bahsedeceğim.


scope_identity, uygulama geliştirirken veritabanında bulunan tablomuzun ID'si kendisi bir sonraki sayıyı alıcak şekilde ayarladıysak ve o tabloya insert yaptıktan sonra insert yaptığımız kaydın ID'sini başka bir parametre olarak kullanmak adına öğrenmek için kullanılır.

Kullanışına örnek olarak aşağıdaki kod satırlarını inceleyelim.



int pId = 0;
string query = " INSERT INTO tablo_adi (UYE_ID,PROJE_ADI)values(@uid,@edProjeAdi);SELECT @@IDENTITY";
cmd.Parameters.Add("@uid", SqlDbType.NVarChar).Value = k;
cmd.Parameters.Add("@edProjeAdi", SqlDbType.NVarChar).Value = (edProjeAdi.Trim());
cmd.Parameters.Add("@uid", SqlDbType.Int).Value = (uid.ToString());
conn.Open();
cmd.ExecuteNonQuery();
pId = (int)(decimal)cmd.ExecuteScalar();
conn.Close();

Yukaridaki kullanımda testleri gerçekleştirirseniz, son ID'yi getirio fakat veritabanına iki kayıt eklediğini göreceksiniz.Aynı kayıttan iki tane bulunması da sorun olabilir. Bir çözüm olarak iki tane kayıt insert edileceği için birini silmek tercih edilebilir. Fakat bu da performans açısından hem iki kayıt sonrasında silmek hem hız açısından hem de kullanım açısından sağlıklı değil. O nedenle scope_identity'nin sağlıklı kullanımı aşağıdaki şekildedir. İki kodu da deneyerek arasındaki farklılıkları tespit edebilirsiniz.


int pId = 0;
string query = " INSERT INTO tablo_adi (UYE_ID,PROJE_ADI)values(@uid,@edProjeAdi);SELECT @@IDENTITY";
string query2 = "Select @@Identity";
cmd.Parameters.Add("@uid", SqlDbType.NVarChar).Value = k;
cmd.Parameters.Add("@edProjeAdi", SqlDbType.NVarChar).Value = (edProjeAdi.Trim());
cmd.Parameters.Add("@uid", SqlDbType.Int).Value = (uid.ToString());
conn.Open();
cmd.ExecuteNonQuery();
cmd.CommandText = query2;
pId = (int)(decimal)cmd.ExecuteScalar();
conn.Close();

İyi çalışmalar.