Visual Studio 2013 Yazılım Platformunda C# Koduyla GMail Hesabı Üzerinden Excel Dosyasında Kayıtlı Kişilere eMail Yollama:
visual studio'dan excele bağlanmak için veritabanına bağlanır gibi bir connect string yazmamız gerekir. Bunun için ilk önce, c# kod sayfasında kullanılmak üzere yer alan kütüphanelerin olduğu kısıma System.Net.Mail ve System.IO kütüphanelerini eklememiz gerekir.
EXCEL'den C# 'a VERİ AKTARIMI:
OleDbConnection baglanti = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + txtDosyaYolu.Text.Trim() + "; Extended Properties='Excel 12.0 xml;HDR=YES;'"); // baglanti olarak tanımladığımız bu connection nesnesi ile visual studio üzerinden excel'e bağlanıyoruz.
baglanti.Open();// bağlantımızı açıyoruz.
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [Sayfa1$]", baglanti);//da ile tanımladığımız dataAdapter nesnesi ile excelin belirli bir sayfasındaki veri tablosuna ulaşıyoruz. Tıpkı veritabanı tablo sorgulmalarındaki gibi... burada dikkat edilmesi gereken nokta excel dökümanımızda ulaşmak istediğimiz sayfanın ismidir, sonradan değiştirilmemişse default adı Sayfa1 olmalıdır. Değiştirilmişse de erişilmek istenen sayfanın ismi select sorgusuna girilmelidr, tıpkı veritabanı select sorgularındaki tablo isimleri gibi... excelde her sayfa bir tablo görevi görmektedir.
DataTable dt = new DataTable();// da ile tanımlı dataAdapter nesnesi ile gelen verileri dt diye bir dataTable'a aktarmamız gerekiyor. Böylece excel sayfasından gelen veriler kod bazında sanal tablo halini almış olacaktır.
da.Fill(dt);// burada dt ile tutmuş olduğumuz verileri dataAdapter nesnesine yüklüyoruz.
dataGridView1.DataSource = dt.DefaultView;//burada dt ile tutmuş olduğumuz sayfa verilerini uygulamanın form diye adlandırılan tasarım kısmında görüntülenmesini sağlamak için forma eklemiş olduğumuz dataGridView1 nesnesine yüklüyoruz. böylece uygulamayı çalıştırdığımızda excel sayfasından çektiğimiz veriler bir veritabanı tablosu şeklinde tasarım formumuzda listelenecektir.
baglanti.Close();//burada önceden açmış olduğumuz c#-excel bağlanma nesnesini disable ediyoruz.
-------------------------------------------------------------------------------------------------------------------------
EXCEL SAYFASINDA YER ALAN TÜM KİŞİLERE AYNI ANDA MAİL GÖNDERME:
try
{
SmtpClient client = new SmtpClient("smtp.gmail.com", 587);//burada gmail client configürasyonu ayarlarını yaptık.
string[,] dataValue = new string[dataGridView1.Rows.Count, dataGridView1.Columns.Count];//burada dataValue diye iki boyutlu bir dizi yaratarak excel sayfasından gelen data tablosunun satır ve sütun sayısını aldık.
foreach (DataGridViewRow row in dataGridView1.Rows)//tablonun tüm satırlarını teker teker dolaşır..
{
if (row.IsNewRow) continue;// satırlar devam ettiği sürece aynı işlemlere devam edecektir.
using (StreamReader reader = File.OpenText(txtFormatYolu.Text.Trim()))//burada complex bir mail göndermek adına önceden hazırlamış olduğumuz txt dosyasındaki html sayfa tasarım kodlarını okutuyorz zira txt dosyasındaki html tasarım kodları bizim mesajın gövdesini oluşturmuş olacaktır, tasarımda html kodları ile yapabildiğimiz tablo image link vb yer almaktadır. tasarım mailimize zenginlik kazandıracaktır.
{
MailMessage mesaj = new MailMessage();//burada mesaj adında mail nesnesini oluşturuyoruz.
mesaj.To.Add(dataGridView1.Rows[row.Index].Cells[2].Value.ToString());//burada excel dosyasından çektiğimiz mailin kime gidecek ise onların mail adresleri döngü devam ettiğince sırayla art arda mesaj.To.Add(); kısmında yerini alacaktır.
mesaj.From = new MailAddress(txtGondericiGMailAdres.Text);//burada kendi mail adresimizi giriyoruz.
mesaj.Subject = txtKonu.Text;//burada gönderilecek mailin başlık ya da konu kısmını oluşturacak satırı giriyoruz.
mesaj.IsBodyHtml = true;
mesaj.Body = "Sayın" + " " + dataGridView1.Rows[row.Index].Cells[0].Value.ToString() + " " + dataGridView1.Rows[row.Index].Cells[1].Value.ToString() + " ,";
mesaj.Body += Environment.NewLine + "\n";
mesaj.Body += richTextBox1.Text;//gönderilecek mailin gövdesini oluşturacak olan mesajı tasarım formumuza eklemiş olduğumuz richTextBox1 nesnesinden okuyacaktır.
mesaj.Body += reader.ReadToEnd();// burada gönderilecek mailin devamını veya alt tasarım kısmını oluşturacak olan txt dosyasından gelen html kodlar okunur.
NetworkCredential guvenlik = new NetworkCredential(txtGondericiGMailAdres.Text, txtGondericiGMailSifre.Text);//burada ise kendi mail hesabımıza giriş yaparken kullandığımız kullancıIsmi ile kullanıcıSifresi yer almaktadır.
client.Credentials = guvenlik;
client.EnableSsl = true;//mail server güvenliğini aktif hale getiriyoruz.
client.Send(mesaj);//mesajımızı gönderiyoruz.
}
}
progressBar1.Value = 100;
MessageBox.Show("Mail Tüm Listedekilere Başarıyla Gönderildi...");
progressBar1.Value = 0;
}
catch
{
// MessageBox.Show("Mail Gönderme Başarısız.", "Mail Gönderme");
MessageBox.Show("Mail Tüm Listedekilere Gönderilemedi..!");
}
İnsanoğlu hala tüm bilgisayarların en alışılmadık olanıdır. Jhon F.Kennedy
22 Temmuz 2016 Cuma
Jasper Report ve IReport Kullanımı
IReportta SQL Sorgu Yazmak:
IReport içinde tanımlamış olduğunuz SQL sorgusuna göre veritabanından field çeker. Ancak siz bu SQL sorgusunu istediğiniz zaman değiştirerek getirmeyi unuttuğunuz farklı fieldları getirebilir ve ona göre raporunuzu güncelleyebilirsiniz , bunu yapmak için 'Designer' , 'XML', 'Preview' sekmelerinin yanındaki üstüste konmuş diskleri andıran sembole tıkladığınızda SQL editörü çıkmaktadır ve IReporta projesini ilk oluşturduğunuzdaki SQL sorguyu göreceksiniz. İşte o sorguyu her güncellediğinizde projenizi de güncellemiş olursunuz yazacağınız yeni sorgulara göre veritabanından istediğiniz alanları getirerek forma ekleyeblirsiniz.
IReportta SQL'e Bağlı Parametre Kullanımı (Field'a Göre Filtreleme):
IReportta veritabanınızdan gelecek bir alan adına göre filtreleme yapmak isteyebilirsiniz. Mesela veritabanınızdaki öğrenciler tablosundan gelen verileri isme göre öğrencilerin notlarını veya kişisel bilgilerini listelemek isteyebilirsiniz. Bunun için önceki konularda anlattığım gibi parametre oluşturarak oluşturduğumuz parametrenin adını 'ogradi' koyalim, ardından IReporttaki SQL sorgumuzu açarak SELECT * FROM ogrenci WHERE ogradi=$P{ogradi} diye güncellediimizde raporu IReporttan her Preview ettiğimizde program bize kayıtları hangi öğrenci adına göre listelemek istediğimizi soracaktır. biz de kimin adını girersek, diyelim ki "Mehmet" girersek sınıftaki tüm Mehmet adındaki öğreincilerin bilgileri raporda listelenecektir.
IReportta Dinamik İmage Ekleme:
İReportta yazdığınız SQL sorgusuna göre bazen rapora eklediğiniz image ların değişken olmasını isteğebilirsiniz. Şöyle ki, SQL sorgunuzda boolean tanımlı fieldları kullanıyor olabilirsiniz. Ve tablodan '1' değeri okunduğunda raporda "ok" işaretli image görünsün, tablodan '0' değeri okunduğunda ise, ya boş gelsin ya da "no" işaretli imagenin görünmesini istiyorsunuz. Bunun IReportta çok basit yolu var: İlk önce IReport programının Report Elements kısmından image nesnesini forma eklemek istediğimiz yere sürükleyerek bırakıyoruz. Zaten bu işlemi yaptığımızda program bize hangi image i yüklemek istediğimize dair bize bir seçim penceresi getiriyor, oradan image i seçiyoruz, ardından seçtiğimiz image nin properties kısmındaki özelliklerden "image expression" özelliği karşısındaki üç noktalı butona tıklıyoruz ve karşımıza gelen pencerede consol gibi yazı yazılan kısma $F{field_adi}.intValue()== 1 ? "ok.png" : "no.png" formülünü ekliyoruz. Burada '0' veya '1' hangi filedtan gelecekse o field in ismini yazıyoruz, daha sonra field benim örneğime göre int olarak tanımlanmış ancak siz field i veritabanında "bool" olarak tanımlamışsanız veri tipini karşıdaki pencereden ona göre ayarlamanız gerekmektedir. yazı yazılan yerde field yeşil renk olduğunda hata yapmamışsınız demektir, field isminin rengi kırmızı ise bir yerde sorun var demektir ya veri tipindedir ya da syntax tadır ona göre kontrol etmeniz gerekmektedir. Ayrıca aşağıdaki pencerelerden field ismi veya veritipine çift tıkladığınızda ya da birini seçerek diğerine çift tıkladığınızda ikisinin de yazı penceresine basıldığını göreceksiniz, yani baştan yazmanıza da gerek yok.
Jasper Report ve IReport Kullanımı
IReportta Parametre Kullanımı:
IReportta parametre kullanımının amacı, raporda kullanılacak nesneleri referans göstermektir. Mesela ana reporta sub report eklediğimizde ana reportun sub reportu görebilmesi için iki taraflı aynı adla parametre tanımlanmış olması gerekir. IReport programının Report Inspector penceresi altında yer alan parameters sekmesine tıkladığımızda altta IReportun kullandığı parametreler listelenecektir. Parameters sekmesine sağ tıklayarak Ad Parameters diyoruz. Ardından en alta oluşan parameter1 sekmesine yine sağ tıklayarak Rename özelliğinden "bagla" diye parametre ismi verdiğimizi varsayalım. Ana rapor için oluşturduğumuz "bagla" parametresi ile sub reporta bağlanmaya çalışacağız. Bunun için ana reportun design formuna eklemiş olduğumuz sub report nesnesine tıklayarak onun properties penceresindeki parameters sekmesine tıklayalım. O penceredeki parameters sekmesinin karşısındaki 3 noktalı düğmeye tıkladığımızda karşımıza $P{SUBREPORT_DIR} adında bir pencere açılacaktır. Pencerenin sağ alt tarafında yer alan "Copy From Master" butonuna tıkladığımızda sub reporta bağlanmak için oluşturmuş olduğumuz "bagla" parametresi gelecektir. Ardından Ok diyerek parametremizi ana repordaki sub report nesnesine bağlamış oluyoruz. Tüm bu işlemleri yaptıktan sonra bu sefer de sub reportun olduğu formu açarak aynı şekilde "bagla" diye aynı isimle Report Inspector penceresindeki parameters kısmına sağ tıklayarak yeni bir parametre oluşturuyoruz. Burada oluşturduğumuz bu aynı parametre sub reportu karşılıklı olarak ana rapora bağlamış olacaktır.
IReport Field Gruplama:
Bazen tabloları veya veritabanından çektiğiniz kayıtları yine veritabanından çekmiş olduğunuz bir alan adı altında listelemek veya gruplamak isteyebilirsiniz. Bu işlemi yapmak için IReport progamı arayüzündeki Report Inspector penceresindeki proje adına sağ tıklayarak Ad Report Group diyoruz. Ardından New group wizard penceresi karşımıza gelecektir. Group Name altına verilerinizi hangi alan adı altında gruplamak istiyorsanız o alanın adını verirseniz daha mantıklı olur. Çünkü daha sonra "Group by the following report object" altında veri gruplaması yapacağınız veritabanından gelen fieldlerden bir field adını seçmeniz gerekecektir. o yüzden field adı ile group name adı aynı olursa amacın ne olduğu belli olacağından daha mantıklı olur. Bu işlemleri yaptıktan sonra next diyerek gruplama işleminin Details diye ikinci aşamasına geçiyoruz. Burada da "Add the group header" ile "Add the group footer" seçenekleri yer almaktadır. verilerinizi raporun neresinde gruplamak istiyorsanız amaca bağlı seçim yapabilirsiniz. Tüm bu işlemleri bitirdikten sonra göreceksiniz ki formunuza verdiğiniz isimle group header ve/veya group footer oluşacaktır. ve o alana eklediğiniz fieldlar altında diğer verileriniz listeleniyor olacaktır. Örneğin; group header adına username demişsek ve group header a $F{username} fieldini eklemişsek veritabanından gelen her username adı altında ona ait bilgileri listeleyebiliyor olacaksınız tabi bu da yazacağınız sql sorgunuza bağlıdır.
Jasper Report ve IReport Kullanımı
IReportta Sub Report Oluşturma:
Sub Report oluşturma amacı rapor niteliğine göre veritabanından çekilen fields lara bağlıdır. Bu da ayrı bir SQL sorgu yazdırmayı gerektireceği için ana rapor altında paletteden sürükle-bırak mantığıyla sub report nesnesi oluşturmamız gerekir. Böylece sub report oluşturma sihirbazı sayesinde ayrı bir sql sorgu yazabilirsiniz. Sub report nesnesi oluşturma sihirbazında 7 aşama vardır ilk aşamada yeni oluşturduğunuz rapor için yeni bir sql yazmak istiyorsanız, "create a new report" u seçiyorsunuz. Önceden oluşturmuş olduğunuz bir sub rapora bağlamak istiyorsanız, "Use an existing report" u seçiyorsunuz. Sub report oluştururken kaynak dosyaların salt kendi pc nizde konumlanmasını yani path belirterek rapor oluşturmak istemiyorsanız, "Just create sub report element" seçeneğini seçmeniz gerekmektedir.( Bu seçenek değişken tanımlama konusudur). Bu saydığımız seçeneklerden birini seçtikten sonra Layout kısmında raporda kullanmak istediğiniz temalar soruluyor, o temalardan işinize yarayacak bir tema seçerek next diyebilirsiniz. 3. aşamada sql query aşmasıdır. buraya veritabanından çekerek raporda göstermek istediğiniz veya kullanmak istediğiniz fieldlara göre sql sorgumuzu yazabiliriz. 4. aşamada önceki şamada yazdığınız sql sorgunun fieldsları gelecektir formda hangi fieldsleri kullanacaksanız o field ları karşı listbox a atarak tekrar fields eleme hakkınız vardır. 5. aşamada ise aynen sql sorgulardaki group by mantığına göre kayıtlarınızı bir field adı altında gruplayabilirsiniz ama zorunlu değildir tabi. 6. ve bana göre konunun en canalıcı aşması burada yer alıyor. Report Name: doğal olarak sub reportunuzun ismidir buraya isim vererek geçelim.Location: oluşturulacak sub report jrxml dosyasının konumunu belirtir ki bu yolu değiştirmemenizi tavsiye ederim zaten progam otomatik olarak dosyayı diğer ana jrxml dosyasının yeraldığı klasörde oluşturacaktır. yolu değiştirirseniz ana report sub rebortu görmeyebilir. File kısmını da değiştirmeyiniz. orası da jrxml dosyasının adı ile birlikte konumunu belirtir. Şimdi gelelim aşağıdaki iki seçeneğe: Store the directory name in a parameter seçeneği size sub report daha sonra ana report tan kolayca çağırabilmeniz için bir $P{SUBREPORT_DIR} diye bir parametre oluşturacaktır. bunun önemi de oluşturduğunuz raporu ireport kurulu veya java tabanlı rapor okuyucu düzenleyici kurulu başka bir bilgisayar üzerinden açmak istediğinizde başka bilgisayarda path hatası yaşamadan kendi pc nizde oluşturuyor olduğunuz bu raporu kullanabileceksiniz. ancak öyle bir durum yoksa raporu sadece kendi sisteminizde kullanacaksanız o zaman bir alt seçenek olan Use a static absolute path reference seçeneğini seçebilirsiniz. 7. ve son aşamada ilk seçenek olan use the same connection used to fill the master report seçeneğini seçebilirsiniz.
Jasper Report ve IReport Kullanımı
IREPORT KURULUMU:
İReportu kurmak için JDK'ya ihtiyacımız vardır. JDK'yı indirdikten sonra İReport programını kurarız. Programı kurduktan sonra programı kurarken dosyaları nereye atacağını belirttiğiniz klasöre gidiyoruz. Kurulum sırasında path'ini değiştirmediyseniz diğer programlar gibi default olarak sistemin program files klasörüne atar. Dolayısıyla kurulum bittikten sonra program files klasörüne giderek jasperSoft veya ireport klasörünü bularak içine giriyoruz. Klasörün içinde etc diye bir klasör yer alıyor olmalı, o klasörün de içine girerek programın konfigürasyon dosyası olan klasörün içindeki ireport.conf dosyasını notepad++ ve benzeri programlarda açıyoruz. Dosyanın içerisinde #jdkhome="/path/to/jdk" diye sistem yolu göreceksiniz. # işareti olmaksızın bu path'i kopyalayarak enter ile bir alt satıra iniyoruz ve bir alt boş satıra yapıştırıyoruz. daha sonra önceden indirmiş olduğumuz JDK sürümünün Java adı altındaki klasöründen bularak JDK sürümünün yer aldığı klasörün yolunu pencerenin üst adres satırından kopyalıyarak jdkhome="" yapıştırıyoruz.(örnek:jdkhome="C:\Program Files\Java\jdk1.7.0_79") daha sonra dosya üzerinde yaptığımız bu değişikiliği kaydediyoruz. Ama değişikliğin kaydedilebilmesi için ireport.conf dosyasını masaüstüne attıktan sonra üzerinde değişiklik yapmak üzere notepad++ da açıyoruz. değişikliği kaydettikten sonra da dosyayı etc klasörünün içine tekrar atıyoruz.Sonra da ireportun masaüstündeki ikonuna tıklıyoruz program kesinlikle çalışacaktır. Bu işlemlerden sonra hala çalışmama durumunun tek bir sebebi daha olabilir o da JDK sürümü ile uyumsuzluk yaşıyor olmasındandır.
13 Mayıs 2016 Cuma
SLA Hizmet Seviye Anlaşması
SLA Service Level Agreement - Hizmet Seviye Anlaşması nedir?
SLA (Service Level Agreement) Hizmet Düzeyi Sözleşmesi anlamına gelir. SLA müşteri ile hizmet sağlayıcı arasında düzenlenen bir anlaşma ile, hizmet sağlayıcı tarafından müşteriye sağlanan hizmetlerin niteliğini, miktarını, teslim zamanını, müdahale ve sorun çözme sürelerini ve benzeri diğer niteliklerini tanımlar.
SLA hizmet kalitesinin standartlarını oluşturur ve müşterinin hizmet sağlayıcı firmadan beklemesi gereken hizmeti belirler. Bu sayede destek veren kurum çalışanlarının bireysel ve organizasyon hizmet kalitesinin ölçülebilmesi ve yönetilebilmesi mümkün olur.
SLA, özellikle teknik destek, danışmanlık hizmetleri, bakım onarım anlaşmalarının tanımlanmasında önem kazanır. Müşteri, satın aldığı SLA anlaşması içerisinde hizmeti alacağı firmadan alacağı hizmetin seviyesini, önemi doğrultusunda kendisi belirler. Bu sayede proje bütçesi doğrultusunda alınan hizmetin seviyesi yükseltilebilir, veya tasarruf sağlamak amacıyla azaltılabilir.
Hizmet Sağlayıcı açısından öncelikli müşteri ve projelerin önem sıralamasının belirlenmesini sağlar. Hizmet sağlanması açısından SLA Hizmet Seviyesi yüksek olan müşterilerin taleplerine öncelik verileceği için, Öncelikli Müşteriler talep cevaplaması aşamasında beklemek durumunda kalmaz.
9 Eylül 2012 Pazar
Stored Procedurelere Giriş
Bu yazimda SQL server’lardaki stored procedure’lerden bahsedecegim. Stored procedureler SQL server’da saklanan, sql ifadelerini barindiran metotlar gibi düsünülebilir. Veritabani programlamaya ilk baslayanlar SQL ifadelerini kullandiklari programlama dilinde yazarlar(c#, vb,…). bu ilk ögrenim için uygundur ancak gerçek hayattaki projelerde SQL ifadeleri stored procedurelerde saklanir. Stored procedureler bir kere derlenirler ama programlama dilindeki SQL ifadeleri program her çalistiginda tekrar derlenir ve bu da bir zaman kaybi demektir. Diger yandan kullandigimiz dilde yazdigimiz SQL ifadelerinin dogru veya yanlis oldugunu o dil anlayamaz, dogru kabul eder ve derleme asamasinda hata meydana gelmez, ama o satir isletilecegi zaman yani runtime’da hata verir ve bu da programlama açisindan kötü bir durumdur. Stored procedureler SQL server’da yaratildiktan sonra derlenir ve hatali olup olmadiklari orada anlasilabilir.
Simdi basit bir stored procedure örnegi yapalim.
Create procedure deneme
As
Select * from denemetablosu
Go
Bu procedure anlasilacagi gibi veritabanimizdaki denemetablosu isimli tablodan bütün verileri çeker. SQL cümlesini istedigim kadar kompleks hale getirebiliriz. Zaten Stored procedurelerin amaci karmasik SQL cümlelerini SQL’de saklayip hep onu kullanmamizdir.
Daha önceden olusturdugumuz bir stored Procedureu çalistirmak için procedure_ismini “örnegimizde deneme” yazip Execute dememiz yeterli olacaktir. Böylece denemetablosunda ne kadar veri varsa onlari görebiliriz.
Daha önceden olusturdugumuz bir stored Procedureu çalistirmak için procedure_ismini “örnegimizde deneme” yazip Execute dememiz yeterli olacaktir. Böylece denemetablosunda ne kadar veri varsa onlari görebiliriz.
Stored procedureler metotlar gibi parametre alabilir ve deger döndürebilirler.Simdi onunla ilgili basit bir örnek gösterelim.
Create procedure deneme(@deneme_ad nvarchar(50), @ deneme_soyad nvarchar(50))
As
Select * from denemetablosu where AD=@deneme_ad and SOYAD =@deneme_soyad
Go
Bu örnek veritabanimizda kayitli olan denemetablosu isimli tablonun AD ve SOYAD kolonlarini kontrol ediyor ve eger aradigimiz ad ve soyadda kayitlar varsa onlarin bütün kolonlarini bize gösteriyor.
Bu procedure’ü kullanmak için de procedure’ün adini yazip yanina alacagi parametreleri çift tirnak içinde yazmamiz ve execute tusuna basmamiz yeterli olacaktir.
deneme “Emrah”,”Koçak”
bu satir isletildigi zaman bize ad sütununda Emrah ve soyad sütununda Koçak olan bütün verileri gösterir.
Eger procedure’ümüz sayisal bir deger aliyorsa (int, decimal gibi) o zaman çift tirnaga gerek yoktur.
Simdi bir de return degeri ile ilgili biraz bilgi vermek istiyorum. Stored procedureler zaten select komutuyla bize verileri getirirler ama bazen return degerine ihtiyaç duyariz. Mesela veritabanina kayit yapmak istiyoruz ve kullanici adini belirleyici özellik olarak atadik yani her kullanici adi birbirinden farkli olmali. Simdi böyle bir veritabanina veri girmek istiyoruz ve kayit isleminin olup olmadigini da bilmek istiyoruz diyelim. Burada stored procedurelerin bir özellginden daha bahsetmek istiyorum, stored procedurelerde diger dillerdeki gibi if, else, next, count gibi deyimleri de kullanabiliriz ve degisken tanimlayip onlara deger atayabiliriz. T-SQl’de degiskenler baslarina “@” ifadesi konularak tanimlanir. Simdi yukarida anlattigim gibi bir veritabani için kayit procedure’ü yazalim. Tablomuzun adi KAYIT olsun. 3 tane kolonu olsun:
KULLANICI_ADI, AD, SOYAD
KULLANICI_ADI, AD, SOYAD
Create procedure KAYITYAP(@KADI nvarchar(50),
@AD nvarchar(50),
@SOYAD nvarchar(50))
AS
Declare @kayitkontrol int
Declare @sonuc int
Set @kayitkontrol=(select count(*) from KAYIT where KULLANCI_ADI=@KADI)
if(@kayitkontrol=0)
Begin
insert into KAYIT(KULLANICI_ADI, AD,SOYAD) values (@KADI,@AD,@SOYAD)
set @sonuc=1
end
else
begin
set @sonuc=0
end
return @sonuc
GO
Yukaridaki procedure’ün ne yaptigini kisaca anlatayim. Öncelikle disarida kullanici adi, ad ve soyad olmak üzere 3 tane deger aliyor. Sonra iki tane degisken tanimliyoruz. Bu degiskenlerden ilki @kayitkontrol, tipi ise integer. Bu degiskeni veritabaninda ayni kullanici adinda kayit var mi yok mu onun için kullaniyoruz.select count(*) from KAYIT where KULLANCI_ADI=@KADI
satiri veritabanindaki KAYIT isimli tabloda KULLANICI_ADI sütununda bizim girdigimiz degerle ayni olan verilerin sayisini getiriyor. Eger veritabaninda ayni kullanici adiyla kayit yoksa bu deger 0 olarak döner. Kullandigimiz if ifadesiyle de eger bu deger 0 ise o zaman kayit yap diyoruz. Kullandigimiz ikinci degisken @sonuc ise return degeri olarak kullaniliyor. Tipini integer olarak atadik. Eger kayit islemi yapilirsa 1 degerini atiyoruz yapilamadiysa 0 degerini atayip döndürüyoruz ve kullandigimiz arayüz programi da bu degeri ”kayit yapildi” ya da “yapilamadi” gibi kullanici tarafindan anlamli olan cümlelere dönüstürür. Bu islem tabi ki çok çesitli sekillerde de yazilabilir, o programcinin düsüncesine kalmistir.
satiri veritabanindaki KAYIT isimli tabloda KULLANICI_ADI sütununda bizim girdigimiz degerle ayni olan verilerin sayisini getiriyor. Eger veritabaninda ayni kullanici adiyla kayit yoksa bu deger 0 olarak döner. Kullandigimiz if ifadesiyle de eger bu deger 0 ise o zaman kayit yap diyoruz. Kullandigimiz ikinci degisken @sonuc ise return degeri olarak kullaniliyor. Tipini integer olarak atadik. Eger kayit islemi yapilirsa 1 degerini atiyoruz yapilamadiysa 0 degerini atayip döndürüyoruz ve kullandigimiz arayüz programi da bu degeri ”kayit yapildi” ya da “yapilamadi” gibi kullanici tarafindan anlamli olan cümlelere dönüstürür. Bu islem tabi ki çok çesitli sekillerde de yazilabilir, o programcinin düsüncesine kalmistir.
Stored procedurelerde return degeri sadece matematiksel tipler olmalidir. Mesela yukaridaki örnek için eger return degerine “kaydiniz basariyla yapildi” seklinde string bir ifade döndürseydik bu ifadeyi arayüz programimizda kullanamazdik. Öyle return degerleri atayip procedure’ümüzü derledigimizde hata yazisi göremeyiz ama bu sekilde yapmanin bir anlami yoktur ve yanlistir.
Biraz da stored procedureleri düzenlemeden bahsetmek istiyorum. Örnegin kayityap procedureümüzü degistirmek istiyoruz çünkü tablomuza bir sütun daha ekledik, o zaman procedure’ü yaratirken kullandigimiz “create” ifadesi yerine “alter” yazmamiz yeterli olacaktir. Sonra alacagi degerleri tabloya göre düzenler ve procedurede istedigimiz degisikligi yapabiliriz
Bu yazimda sizlere stored procedureler ile ilgili giris için bir bilgi vermeye çalistim. Diger yazilarimda stored procedurelerin C#ta kullanimini bütün yönleriyle incelemeye çalisacagim.
Kaydol:
Kayıtlar (Atom)
