Pages

SqlServer de Cursor olayı

Cursor  database den aldığımız verinin içinde gezinmemizi sağlar. bunu Database den Datareader ile dataları aldığımızda da yapabiliriz. fakat bu kullanıcı makinasında (client) yapılacağı için veri eğer büyükse performansı düşürür. bu işlemi server de yapıp client a sadece istenileni göndermek ise performans olarak daha iyi olur.

DECLARE Kisi_tablosu CURSOR FOR
SELECT Ad,soyad FROM tblKimlik;
OPEN Kisi_tablosu;
FETCH NEXT FROM Kisi_tablosu;
WHILE @@FETCH_STATUS = 0
   BEGIN
      FETCH NEXT FROM Kisi_tablosu;
   END;
CLOSE Kisi_tablosu;
DEALLOCATE Kisi_tablosu;

burada yine önce  Declare Kisi_tablosu Cursor For Select Ad,Soyad from tblKimlik; satırları ile önce cursorumuzu tanımlıyor sonrada hangi sql işlemi üzerine çalışacağını gösteriyoruz. tblKimlik tablosunda Ad,soyad değişkenlerini alıyoruz.

cursoru açıyoruz Open Kis_tablosu; ile.

FETCH NEXT FROM Open Kis_tablosu; ile ilerlemeyönünü gösteriyoruz.

WHILE @@FETCH_STATUS = 0
   BEGIN
      FETCH NEXT FROM Kisi_tablosu;
   END;

data basede kayıdımız olduğu sürece kayıtları tek tek alıyoruz.

CLOSE Kisi_tablosu;
DEALLOCATE Kisi_tablosu;

Cursoru kapatıyoruz ve rem de boşuna yer kaplamasın diye DEALLOCATE ile remden kaldırıyoruz. burda DEALLOCATE olayı önemli. Çünkü Eğer unutursak bunu belirli bir sayı sonra server remi dolacak ve isteğimize yanıt veremeyecektir. performan için gerekli.

SqlServer de Triggerler

sql serverde trigerler ve cursorlar ve stored procedure ‘ler öncelikle performans sonrada bazı güvenlik artıları için kullanılır.

Triggerler (tetikleyiciler) i bazen database de yaptığımız bazı işlemlerde o işlem ile birlikte başka olayın tetiklenmesini istediğimizde yaparız. örneğin bir ürün tablosuna kayıt girildiğinde o kayıta ait bir log tutulması nı otomatik olarak tetikleyicilerle yapabiliriz veya ürün silmek istediğizde o ürünün başka bir tablo ile etkileşimi olduğunu kontrol eder silmesini engelleyebiliriz veya ürünü silince ttikleyici ile ürünün başka bir tablodaki veilerini de silebiliriz.

cursor ise database den aldığımız verinin içinde gezinmemizi sağlar. bunu Database den Datareader ile dataları aldığımızda da yapabiliriz. fakat bu kullanıcı makinasında (client) yapılacağı için veri eğer büyükse performansı düşürür. bu işlemi server de yapıp client a sadece istenileni göndermek ise performans olarak daha iyi olur.

Triggerler : 

 

CREATE TRIGGER dbo.KontrolEt
   ON  dbo.tblKimlik
   AFTER  INSERT ,DELETE,UPDATE
AS
BEGIN
    declare @AdresSayisi int
    declare @KimlikSayisi int

select @KimlikSayisi = count(*)    from tblKimlik
select @AdresSayisi = count(*)    from tblAdres

   if     (@KimlikSayisi =  @AdresSayisi)
    insert into tblLog(logumuz) values('Doğru')
else
insert into tblLog(logumuz) values('yanlış')

SET NOCOUNT ON;
END

şimdi kodlarımızı anlatalım

CREATE TRIGGER dbo.KontrolEt
   ON  dbo.tblKimlik
   AFTER  INSERT ,DELETE,UPDATE

burada ilk satırda Trigger i oluşturuyor ve KontrolEt adını veriyoruz.Sonra hangi tablo üzerinde işlem olduğunda tetikleneceğini veriyoruz on dbo.tblKimlik ile.

after insert,delete,update ise tablonun hangi işlemlerden etkilendiğinde tetikleyicimizin çalışacağını gösterir.

AS
BEGIN
    declare @AdresSayisi int
    declare @KimlikSayisi int

select @KimlikSayisi = count(*)    from tblKimlik
select @AdresSayisi = count(*)    from tblAdres

burda ise trigeri başlatıyor ve AdresSayisi ve KimlikSayisi isimli 2 değişken deklare ediyoruz. Daha sonra Select cümlemiz ile tblKimlik tablomuz ve tblAdres tablomuzdan kayır sayısını alıp karşılaştırıyoruz.

   if     (@KimlikSayisi =  @AdresSayisi)
    insert into tblLog(logumuz) values('Doğru')
else
insert into tblLog(logumuz) values('yanlış')

set nocount on;

end

KimlikSayisi AdresSayisi ne eşitse tblLog Adlı tablomuza doğru değilse yanlış kayıtınnı işliyoruz.

set nocount on; end kısmında ise işlemimizi bitiriyoruz.

tabiki teikleyicimiz inser,delete,update işlemi yapıldığı anda tblKimlik tablosu üstünde çalışmaya başlayacaktır.

Trigerler select işleminde çalışmaz sadece insert,update, delete işlemlerinde çalışırlar.

Ajax (XMLHttpRequest)

 

Öncelikle Ajax nedir? niye kullanılır bu soruların cevabını verelim. Çünkü bir teknolojinin ne işe yaradığını bilmezsek gerektiğinde kullanamayız.

ajax=Asynchronous JavaScript and XML demektir. Peni ne işe yarar bu ajax derseniz. sayfa içinde bazen veritabanı bağlantıları yaparız veya başka bir kod sayfasında işlem yapıp bu sayfayı etkilemek isteye biliriz fakat tüm bunları yaparken sayfayı yenilemek gerekir. işte ajax bu noktada devreye girerek sayfayı yenilemeden sadece sayfa içinde bazı bölümlerin yenilenmesini ve gerekli işlemleri yapmamızı sağlar.Sunucu ile doğruden iletişim kurabiliriz.
Ajax XMLHttpRequest nesnesini kullanır. sunucu bağlantısı için.

Ajax Kullanmak için ;

  • JavaScript
  • Html/XHTML bilmemiz gerekir.

Şimdi birkaç basit uygulama ile ajax kullanımını öğrenelim.

testajax.html dosyamızı oluşturalım.



<html>
<body> //script bloğu içine kullanacağımız gerekli ajax ve javascript //kodunu yazıyoruz
<script type="text/javascript">
function ajaxFunction() {
var xmlHttp;//xmlhttp nesnemizi tanımlayalım try {
// Firefox, Opera 8.0+, Safari için nesnemizi oluşturalım.
xmlHttp=new XMLHttpRequest();
} catch (e) {
// Internet Explorer
try {
//internet explorer 6 ve üstü tarayıcılar için
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
//internet explorer 5.5
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
alert("Your browser does not support AJAX!");
return false;
}
}
}
//sunucudan gelecek yanıtı işleyecek fonksiyon xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState==4) {
//sunucudan gelen yanıtın formumuzdaki time textbox’una yazılması document.myForm.time.value=xmlHttp.responseText; } }
//sunucu ile iletişim. xmlHttp.open("GET","time.php",true); xmlHttp.send(null);
}
</script>

<form name="myForm">
//Ajax işleminin çalışma başlangış yeri

Name: <input type="text"onkeyup="ajaxFunction();"name="username" />
Time: <input type="text" name="time" /></form>
</body>

</html>


test.php






<?php
echo date('H:i:s');
?>



şimdi gelelim. yukarıda kodda kullandığımız. bazı kodalrı açıklamaya

OnlyReadyStateChanged : sunucudan gelen veriyi kullanabilmek için fonksiyon ayarlar.

readyState : Sunucunun yanıt durumunu tutar.

1: istek başlatılmadı

2: istek ayarlandı.

3: istek gönderildi

4: istek işlemde

5: istek tamamlandı

if(xmlHttp.readyState==4)  burada isteğimizin işlemde olup olmadıını kontrol ediyoruz.





xmlHttp.onreadystatechange=function()

{
if(xmlHttp.readyState==4)
{
document.myForm.time.value=xmlHttp.responseText;
}
}



burada ise myform isimli formumuzun time isimli textbox ının değerini test.php den gelen değer olarak atıyoruz.

ResponseText:Sunucudan gelen veriyi alıyoruz





xmlHttp.open("GET","time.php",true);

xmlHttp.send(null);



burada ise isteğimizn gönderiliş şeklini ayarlıyor ve sunucuya gönderiyoruz.

open(); 3 parametre alır

1- get/post gönderim metodu

2- URL

3- isteğin asenkron olarak elealınacağını gösterir.

Send() ise isteğimizi sunucuya gönderir.
istersek send() içininde sunucuya parametrede atabiliriz.





<form name="myForm">

Name: <input type="text"onkeyup="ajaxFunction();"name="username" />

Time: <input type="text" name="time" /></form>

burda ise ajax sın nezaman çalışacağına karar veriyoruz. kullanıcı name alanında herhangi bir tuşa bastıktan sonra olrak ayarladık.

C# da yazılım standartları

İsimlendirmeler.

public void Sınıfım

{

public int Sayi=100;

public void ClassOrnek()

{

}

}

değişken isimlerinin başharfleri önemli.

2-Local değişkenle ve metod değişkenleri

public void ClassOrnek(int yeniNumara )

{

int numara;

}

local değişkenler ilk harfi küçük. metod değişkenlerikelimeolarak ayırırsak ikinci kelimenin başharfi büyük.

3-arayüz tanımlamalarında

interface IAraYuz
{
}

interface lerde I harfi ile başlamak şart değil ama artık klasik olarak tüm uzman yazılımcılar tarafından kullanılır bir hal almış durumda

4- metot isimleri anlamlı olmalıdır. Yüklem –nesne ilişkisi olmalıdır.

ShowDialog veya GetDirectoryInfo gibi..

5- Metotlarda isim veriken geri döndüreceği değertipi isimde belirtilebilir.

GetObjectState-

6 – bir sınıfa ait özel değişkenler _ ile başlar

public void ClassOrnek(int yeniNumara )

{

private int _numara;

}

 

7- Anlaşılabilir değişken isimleri kullanın .Değişkenlerinizin tek karakterden oluşmamasına özen gösterin.

8- Generik koleksiyonlar kullanırken tipler için etiketler kullanın

public LinkedList<K,T> { }

yanlış kullanım ise

public LinkedList<KeyType,DataType> { }

 

9- Namespace’lere anlamlı isimler verin

10- tip tanımlamalarında full isim kullanmak yerine using ifadesi ile alan isimlerini tanımlamaktan kurtulun.

System.Collections.ArrayList YeniDiziNesnesi = new  System.Collections.ArrayList();

yerine
using System.Collections;

kullandıktan sonra kodumuzda
ArrayList YeniDiziNesnesi = new ArrayList();

11- Using ile tanımladığımız isim alanlarını alt alta dizin

12- Sınıflar içinde önce değişkenleri tanımlayın.sonra metodları

public class BenimClasim
{
private int _sayi;
private string _adi;
public void method1(){}
public void method2(){}
}

13-  “{” parantezleri yeni satıra indirin

14 – Delegate tanımlamalarında aşağıdaki şekildeki gibi davranın

a=)parametreli delegate

public delegate void temcilci(int deger);

parametsiz delegate

public delegate void temcilci();

53 CSS örneği

 

Siteleriniz de kullanabileceğiniz güzel örnekler .

BURDAN BAKABİLİRSİNİZ