24 Eylül 2020 Perşembe

Trigger Nedir?

Merhabalar, bu makalemde trigger nedir, bir trigger nasıl yazılır bu konular hakkında bilgiler edineceksiniz.

Trigger kelime anlamı tetikleyicidir. RDBMS yani ilişkisel veri tabanı yönetim sistemlerinde aktif olarak kullanılır. Veri tabanı nesnesi olup bir tabloda belirli olayların meydana gelmesi durumunda veya olayların öncesinde çalışacak bir stored procedure çeşididir. 

Tabloda meydana gelebilecek olaylar veri ekleme, veri güncelleme veya veri silme işlemleridir. Bu işlemlerden sonra bir iş yaptırmak istersek (aynı tablo ya da farklı bir tabloda) trigger yapısından yararlanırız.

Örneğin;

  • Satış tablosundaki bir ürünün satılması sonrasında o ürünün stok miktarının eksiltilmesi 
  • Banka hesabında para transferi sonrasında otomatik email gönderilmesi 
  • Kayıt silinmek istendiğinde bu kaydın silinemeyeceğinin bilgilendirilmesi 
  • Öğrenci tablosundaki kaydın silinmesi durumunda silinen bu kaydı başka bir aktarılması
Yukarıdaki maddeleri gerçekleştirmek istediğimizde trigger kullanabiliriz. 

Neden Trigger Kullanmalıyız?

Verilerin bütünlüğünü sağlamak için kullanmayı tercih ederiz ya da tablolarda, veri tabanında mevcut olmayan fakat ihtiyacımız olan bilgileri hesaplamak istediğimizde kullanırız.
Örneğin sipariş tablosunda miktar sütununda bir güncelleme meydana geldiğinde toplam_fiyat sütununa karşılık gelen işlemi hesaplayabiliriz.

Trigger Çeşitleri

  1. DML(Data Manipulation Language) Trigger
  2. DDL(Data Definition Language) Trigger
  3. Logon Trigger


1.DML Trigger 

Veri tabanına yapılan veri işleme komutlarını yani insert,update ve delete işlemlerini içeren trigger çeşididir. DML Trigger kullanarak yapacağımız işi "primary key","foreign key", "unique" constraint yapılarını kullanarak da yapabiliriz. Constraint yapılarının yetersiz kaldığı durumlarda DML Trigger yapılarını kullanmayı tercih ederiz. 


DML trigger’ları hazırlarken "inserted ve deleted" isimli tabloları kullanırız.
Örneğin,

  • Bir insert işlemi gerçekleştiğinde "inserted tablosunda" insert edilen kayıtları,
  • Bir update ya da delete işlemi gerçekleştiğinde ise "deleted tablosunda" silinen kayıtları görebiliriz.
1.a After - For
1.a.a After insert
1.a.b After update
1.a.b After delete

1.b Instead of
1.b.a Instead of insert
1.b.b Instead of update
1.b.c Instead of delete

2.DDL Trigger

CREATE DATABASE, DROP DATABASE
Create Table, Alter Table, Drop Table
Create Function,Alter Function,Drop Function
Create View,Alter View,Drop View
Create Stored Procedure,Alter Stored Procedure, Drop Stored Procedure

Veri tabanına yapılan yukarıdaki değişiklik işlemleri gerçekleştiğinde tetiklenebilir. Hangi işlemden sonra tetikleneceğinin bilgisini Trigger’ı tanımlarken belirtiriz.


3.Logon Trigger

Kullanıcı login olmak için giriş yaptığında login ve şifre bilgileri kontrol edildikten sonra eğer bağlantı bilgileri doğruysa bağlantı gerçekleşmeden tetiklenir.

Hangi trigger çeşidini kullanmamız gerektiğine işimizin akışına göre karar vermemiz gerekecektir.



21 Ağustos 2020 Cuma

Tuple Nedir?

C# 4.0 ile gelen Tuple yapısını kullanarak hazırladığımız metottan birden fazla değer döndürebiliriz. Tuple yokken bu işi "out" parametresini kullanarak veya içerisinde birden fazla değer barındıran bir model kullanarak yapabiliriz.

Tuple kullanmanın avantajı ne ?
En büyük avantajı model kullanmadan birden fazla değeri döndürebiliyor olmamızdır.

Nasıl Kullanılır?

Tuple kullanarak birden fazla değer döndürecek metotlar hazırlayabiliriz. Tek metot kullanarak hem en pahalı hem de en ucuz ürünlerin id değerlerini döndürebiliriz.

public Tuple<int, int> EnPahaliEnUcuzUrunId()
{
long enUcuzUrunId = 1;
long 
enPahaliUrunId = 2;

return Tuple.Create(enUcuzUrunId enPahaliUrunId );
}

Gördüğünüz gibi methot geri dönüş tipi olarak Tuple kullandık ve içerisinde 2 tane int tipi tanımlanıp bu değerleri geriye döndürdük. 

Şimdi bu metodu çağıralım.


public void main()
{
Tuple<int, int> values= 
EnPahaliEnUcuzUrunId();
long enUcuz = tupple.Item1;
long enPahali = tupple.Item2;
}

Tuple yapısını kullanarak istediğimiz sayıda istediğimiz tip nesneyi taşıyabiliriz.

Metoda Çok Parametre Geçmek İstersek

Eğer bir metoda birden fazla parametre göndermek istersek bu durumda Tuple kullanılır.

static void Main(string[] args) 


            ParameterizedThreadStart ts = new ParameterizedThreadStart(ThreadMethod); 
            Thread t = new Thread(ts); 
            t.Start(Tuple.Create(1, 9.23F, 2)); 

} 

static void ThreadMethod(object values) 


            Tuple<int, float, int> tpl = (Tuple<int,float,int>)values; 
            Console.WriteLine("Gelen değerler {0} {1} {2}",tpl.Item1,tpl.Item2,tpl.Item3); 



İyi Çalışmalar,

19 Ağustos 2020 Çarşamba

ViewBag - ViewData - TempData Farkları?

 Merhabalar,

Verilerimizi MVC mimarisinde Controller katmanından, View katmanına taşımak istersek (tersi söz konusu değil) en çok kullanılan yapılar aşağıdaki gibidir.

  • ViewData
  • ViewBag
  • TempData 
Bu üç yapının kullanımı birbirine çok yakın olsa da önemli farklılıkları vardır. Şimdi bunları sırasıyla inceleyelim.

ViewData

Controller sınıfından view sayfalarına viewdatadictionary sınıfı ile veri taşınır. 
ViewData ViewDatadictionary sınıfından türetilen bir dictionary nesnesidir. Dictionary mantığıyla kurgulanmıştır. Veri transfer işlemlerinde "key-value" eşleşmesinden faydalanır. Key değeri olarak string tanımlamayı kabul eder.  

public ViewDataDictionary ViewData { get; set; }

 

  1. ViewData kullanarak Controller üzerinden View tarafına veri çekmek için kullanılır. Tersi yapılamaz.
  2. Sadece geçerli istek sırasında okunabilir sonrasında yönlendirmeden sonra değeri null olacaktır.
  3. Veriyi değişkene almak için tip dönüşümü yapmamız gerekli.

    //Doğru Kullanım 
    1- string demo = (string)ViewData["demo"];
    2- string demo = ViewData["demo"] as string;

    

    //Hatalı
    string demo=ViewData["demo"];



View üzerinden erişim


ViewBag

ViewBag, C# 4.0 ile gelen dinamik veri tipi özelliklerinden faydalanır, hataları runtime zamanında alınır. 
Temelde ViewData gibi Controller üzerinden View tarafına veri çekmek için kullanılır.
Sadece geçerli istek sırasında okunabilir.
Yönlendirme sonrasında kendini imha eder, null değer alır.
Veriyi değişkene almak için tip dönüşümü yapmanız gerekmez.

Oluşturduğumuz ActionResult içerisine bir ViewData attık ve değer olarak string bir ifade yerleştirdik.


View üzerinden erişim


TempData

ViewData ile aynı kullanımdadır.  TempDataDictionary Key-Value olarak kurgulanmıştır. Diğer transfer yapılarına nazaran TempData veriyi Request bazlı saklamaz.  TempData üzerindeki veriyi üçüncü Request’e aktarmak istiyorsak Keep() metodunu kullanmalıyız.  Bu şekilde TempData LifeCycle kısa bir süre uzamış olur. TempData kullanımı öncesinde ViewData’da olduğu gibi TypeCast işlemi yapmalıyız. Farklı metotlardan çağırıp kullanabiliriz. 


SQL Çalışma Sorularının Çözümü

 -Ürünler tablosundaki ürünlerden Rengi siyah,silver ya da multi renkte olanları fiyat bilgisine göre büyükten küçüğe getirilip gösterilecek...