Store Procedure if / else Kullanımı

Store Procedure'ler veri tabanı kullanılan projelerin olmazsa olmazıdır.Bunun en önemli nedeni Güvenlik ve Hız dır. Ado.net kullanılanılarak veri insert, update, delete işlemleri yapılan bir uygulamada Store Procedure değilde direkt olarak SqlCommand nesnesine "insert,update,delete" gibi query'ler yazmak pek önerilen bir yol değildir. Nedeni de yine az önce söylediğim gibi öncelikle hız, güvenliktir ve yazdığın kodun ne kadar profesyonelce yazıldığıyla ilişkilidir.

Store Procedure'lerde IF ELSE kullanabildiğiniz vakit emin olun uygulama tarafında yazdığınız C# kodları %30'lara kadar azalacaktır. Örnek olarak verecek olursak; database'de kayıtlı Users adında bir tablom var ve bu tablo Ad, Soyad, Email bilgilerini alarak kullanıcıları kaydediyor olsun. Store Procedure kullanarak bu kullanıcıları database'e kaydeden bir uygulama geliştirecek olduğumuzda, UserInsert ve  UserUpdate işlemlerini yapan 2 adet Store Procedure ihtiyacımız var diyelim. Aslında IF ELSE kullanarak bunu bir Store Procedure ile yapmak hem daha hızlı, hemde C# tarafında bizi çok daha fazla kod yazmaktan kurtarıyor.

Users Tablosu Örneği;

CREATE PROCEDURE InsertUser   //Procedure İsmi

    @Ad varchar(20),   //aldığı atribüt'ler

    @Soyad varchar(20),

    @Email varchar(20)

AS

BEGIN

      DECLARE@HasExist int  //Email adresine göre o kullanıcı daha önce kayıt olmuş mu diye kontol etmemizi sağlayacak olan değişken

      Select @HasExist COUNT(1)

      from Users

      Where Email=@Email   //Bu email adresi kayıtlı mı diye bakıyoruz

IF(@HasExist=0) //Üstteki sorgudan dönen değer @HsExist değişkenine atanıyor ve eğer o kayıt var ise "0" dan farklı bir değer yok ise "0" değerini dönüyor, "0" döndüğünde yeni bir kayıt ekleyeceğimizi anlıyoruz ve aşağıda olduğu gibi Procedure'e parametre olarak gelen değerleri alıp tabloya yeni bir User ekliyoruz

BEGIN

      Insert Into Users   //Insert işlemi

      values

            (@Ad,@Soyad,@Email)

END

ELSE  //Eğer @HasExist "0" a eşit değilse bu demek oluyorki bu kullanıcı database'de kayıtlı bulunmakta, bu seferde Procedure'e parametre olarak gelen değerleri alarak o kullanıcının bilgilerini aşağıda olduğu gibi Update ediyoruz

BEGIN

      Update Users   //Update işlemi

      set

            Ad =@ Ad,  //bilgileri update ediyoruz

            Soyad=@Soyad,

            Email=@Email

      WHERE Email=@Email  //where koşulu O kullanıcıyı bulmamızı sağlıyor

END

END

 

 

"Xap packaging failed. Object reference not set to an instance of an object" Hatası

Windows Phone uygulamalarında "Xap packaging failed. Object reference not set to an instance of an object." hatası aldığınızda sorunun nedeni büyük olasılıkla uygulama içerisinde daha önceden var olan bir resim dosyası yada o tür bir dosyanın silinmiş olmasıdır.

 

 

 

Örnek olarak sol tarafta resimde olduğu gibi banner.png dosyası bulunduğu klasörden silinmiş ancak solution'da halen bulunmaktadır. Çözüm; bu dosyayı solution içerisinden de silmektir.

 

 

Windows Phone Bing Map Kullanımı

Windows Phone Bing Map Kullanımı        

Windows Phone’da içerisinde harita kullanımını gerektiren bir uygulama geliştirmek istediğinizde Bing Map Apı lerinden kolaylıkla yararlanabilirsiniz. Öncelikle ilk yapmanız gereken geliştireceğiniz uygulama için Bing Map Key almanız. Bunun için ilk olarak

 https://www.bingmapsportal.com/ sitesine giderek var olan Microsoft hesabı yada yeni hesap oluşturarak giriş yapmalısınız

sonrasında sol tarafta bulunan menüden Create or view keys ‘e tıklayıp


Gerekli yerleri doldurduktan sonra create key butonuna tıklıyoruz.


Uygulama için bir adet Key oluşuturyoruz ve bu Key’i sonrasında uygulama içerisinde Map kontrolünün içerisine atıyoruz.


Windows Phone uygulamamızın Design sayfasına bir adet Map Kontrolü atıyoruz ve CredentialsProvideriçerisine oluşturmuş olduğumuz Key’i yazıyoruz.

  <Maps:Map Name="mymap" CredentialsProvider="BinMapKey" Width="480" Height="300" VerticalAlignment="Bottom"/>

 

 

Gerekli işlemleri yaptıktan sonra uygulamamızı çalıştırıyoruz ve daha önceleri geliştirmiş olduğumda Son Depremler uygulamasında ki BingMap’in ekran görüntüsü aşağıda olduğu gibidir.

 

Windows Phone SmsComposeTask Kullanımı (Uygulama'dan SMS yollama)

Windows Phone'da uygulama içerisinden SMS göndermek istediğinizde SmsComposeTask kontrolünü kullanabilirsiniz. Daha öncesinde geliştirmiş olduğum Kandil,Bayram SMS uygulamasında da kullandığım kodlar aşağıda mevcuttur.

            SmsComposeTask myTask= new SmsComposeTask();
            myTask.To = " ";  //Sms'in gönderileceği numara
            myTask.Body  ="Message";  //Sms'in içeriği
            myTask.Show();         //Task'i çalıştırdığımız yer

 

 

 

Northwind Database Örnek Soru Cevapları

Northwind Database Örnek SQL Sorgu ve Cevapları

1-)Tüm cirom ne kadar?

SELECT SUM((UnitPrice*Quantity)-(UnitPrice*Quantity*Discount))

ROM[Order Details]

2-)Bugün doğumgünü olan çalışanlarım kimler?

select *

from employees

where month(BirthDate)=month(getdate()) and day(BirthDate)=day(getdate())

3-)Hangi çalışanım hangi çalışanıma bağlı? (İsim - İsim)

select e.FirstName +e.LastName,em.FirstName +em.LastName

from Employees e

inner join Employees em

on e.EmployeeID=em.EmployeeID

4-)Çalışanlarım ne kadarlık satış yapmışlar? (Gelir bazında)

select e.FirstName + ' ' + e.LastName, SUM(Quantity*UnitPrice)

from Employees e

inner join Orders o

on e.EmployeeID=o.EmployeeID

inner join [Order Details] od

on o.OrderID=od.OrderID

group by e.FirstName,e.LastName

5-)Hangi ülkelere ihracat yapıyorum?

select distinct country

from customers

6-)Ürünlere göre satışım nasıl? (Ürün-Adet-Gelir)

select p.ProductName,SUM(od.Quantity) as Adet,sum(od.Quantity*od.UnitPrice*(1-od.Discount)) as Gelir

from Products p

inner join [Order Details] od

on p.ProductID=od.ProductID

group by p.ProductName

order by 3 desc

7-)Ürün kategorilerine göre satışlarım nasıl? (Gelir bazında)

select c.CategoryName,SUM(od.Quantity*od.UnitPrice) as Gelir

from Categories c

inner join Products p

on c.CategoryID=p.CategoryID

inner join [Order Details] od

on p.ProductID =od.ProductID

group by c.CategoryName

order by 2 desc

8-)Ürün kategorilerine göre satışlarım nasıl? (Adet bazında)

select c.CategoryName,SUM(od.Quantity) as Adet

from Categories c

inner join Products p

on c.CategoryID=p.CategoryID

inner join [Order Details] od

on p.ProductID =od.ProductID

group by c.CategoryName

order by 2 desc

9-)Çalışanlarım ürün bazında ne kadarlık satış yapmışlar? (Çalışan  –  Ürün – Adet – Gelir)

select (e.FirstName + e.LastName) as Çalisanp.ProductNamesum(od.Quantity), SUM(od.Quantity*od.UnitPrice)

from Products p

inner join [Order Details] od

on p.ProductID=od.ProductID

inner join Orders o

on od.OrderID=o.OrderID

inner join Employees e

on o.EmployeeID=e.EmployeeID

group by e.FirstName + e.LastName,p.ProductName

order by 4 desc

10-)Hangi kargo şirketine toplam ne kadar ödeme yapmışım?

select s.CompanyName,SUM(o.Freight) as [Ödenen Ücret]

from Shippers s

inner join Orders o

on s.ShipperID=o.ShipVia

group by s.CompanyName

11-)Tost yapmayı seven çalışanım hangisi? (Basit bir like sorgusu J)

select FirstName + ' ' +LastName

from Employees

where Notes like'%Toast%'

12-)Hangi tedarkçiden aldığım ürünlerden ne kadar satmışım? (Satış bilgisi order details tablosundan alınacak) (Gelir ve adet bazında)

select s.CompanyName,p.ProductName, SUM(od.Quantity) as adet,sum(od.Quantity*od.UnitPrice) as gelir

from Suppliers s

inner join Products p

on s.SupplierID=p.SupplierID

inner join [Order Details] od

on p.ProductID=od.ProductID

group by  s.CompanyName , p.ProductName

order by 3 desc

13-)En değerli müşterim hangisi? (en fazla satış yaptığım müşteri) (Gelir ve adet bazında)

select top 1 c.CompanyName,SUM(od.Quantity) as adet,SUM(OD.Quantity*od.UnitPrice) as gelir

from Customers c

inner join orders o

on c.CustomerID=o.CustomerID

inner join [Order Details] od

on o.OrderID=od.OrderID

group by c.CompanyName

order by 3 desc

14-)Hangi ülkelere ne kadarlık satış yapmışım?

select c.Country,SUM(od.Quantity*od.UnitPrice)

from Customers c

inner join Orders o

on c.CustomerID=o.CustomerID

inner join [Order Details] od

on o.OrderID=od.OrderID

group by c.Country

order by 2 desc

15-)Zamanında teslim edemediğim siparişlerim ID’leri  nelerdir ve kaç gün geç göndermişim?

select OrderID,datediff(DAY,ShippedDate,RequiredDate) as dt

from Orders

where datediff(DAY,ShippedDate,RequiredDate)>0

16-)Ortalama satış miktarının üzerine çıkan satışlarım hangisi?(subquerry kullandık, querrynin içinde querry tanımladık)

select *

from [Order Details] od

where Quantity>(select AVG(Quantity) from [Order Details])

order by od.Quantity desc

17-)Satışlarımı kaç günde teslim etmişim?

select OrderID,datediff(DAY,OrderDate,ShippedDate)

from Orders

where ShippedDate not like 'NULL'

order by 2 desc