SqlDataAdapter adp = new SqlDataAdapter("KayitKontrol", Tools.Baglanti); adp.SelectCommand.Parameters.AddWithValue("@MN","MASANO"); DataTable dt = new DataTable(); adp.Fill(dt); int sayi=dt.Rows.Count;
yada şunun gibi bişeyde olur
public static int Kontrol(int gelensayi) { int sayi;
SqlCommand komut = new SqlCommand("KayitKontrol", Tools.Baglanti); komut.Commandtype=Commandtype.StoreProcedure;
kolon sayma işlemi için procedüre kullanmak mantıksız geliyor.executeScalar tek satırda hallediyor zaten.
bunu şöyle kullanırım ben. örneğin üye kayıt olacak.store proc oluştururum.ad,soyad,mail gibi bilgileri gönderirim.procedüre içinde uniq olanları yani benzersiz olanları kontrol ederim.örneğin bu email daha önce kayıt edilmiş mi? gibi.tabi bundan önce de o sütuna constraint ile uniq atarım.
yapman gereken ----------------------------store procedüre kullanmadan : -------------------------------------- string query ="select count(id) from tablo_adi where masano=@masano" Sqlcommand cmd=new sqlcommand(query,connection); cmd.parameters.addwithValue("@masano",value")
cmd.connection.open(); int adet=cmd.executeScalar(); -- kaç satır olduğunu döner.0 ise yok demektir.bu ifadeleri try , catch içine al.hatta genel bir static class oluştur.dbişlemleri altında.her sayfadan bunu kullanabilirsin.
--------------------------store procedüre kullanarak yapmak istersen :--------------------------------
STORE PROCEDÜRE İÇİNDE YAPACAĞIN DEĞİŞİKLİKLER : create proc procName ( @masano int @adet int output -- output ile geri döneceğini bildirirsin. ) as set @adet= ( select count(id) from tabloname where masano=@masano ) -- adedi ayarladık. NOT : ne olur olmaz diye procedürlerde de try-catch kullanırım.hatalari(loglari) kaydeden bir tablo oluştururum.catch içinde bu tabloya şu işlem yapılırken hata oluştu diye eklerim.
CODE BEHİND TARAFINDA YAPACAĞIN DEĞİŞİKLİKLER : string query ="procName" -- store procedüre ismi yazılır Sqlcommand cmd=new sqlcommand(query,connection); cmd.commandtype=commandtype.storeprocedüre; -- cmd bir store procedürdür. cmd.parameters.addwithValue("@masano",value") cmd.parameters["@adet"].direction=parameterDirection.output; -- geri dönüş parametresi olacağını söylemen lazım. cmd.executeNonQuery() -- cmd.executenonquery() kullanılır.
dönen değeri okumak için ; int adet = convert.toint32(cmd.parameters["@adet"].Value);
yazımda büyük - küçük pek duyarlı olamadım :) ama dediğim gibi mssql de aggregate kullanımları için executeScalar() daha mantıklıdır.procedüre kullanmaya gerek yoktur.
< Bu mesaj bu kişi tarafından değiştirildi chnkyn -- 12 Temmuz 2019; 19:22:25 >
Veritabanında tabloda ki kayıtları kontrol edip aynı kayıt yapılmasına engel olmak amacıyla bu sınıfı oluştrudum.
Yapmak istediğim şekil böyle bişeyler
yada şunun gibi bişeyde olur
Storeprocedure sorgusu