Log4Net Database Logx

Log4Net .net uygulamaları için geliştirilmiş olan açık kaynak kodlu bir log’ lama kütüphanesi ve Java’da bulunan loglama aracı Log4J'nin .NET uyarlamasıdır.

 

Log Seviyeleri

ALL : Tüm mesajların loglandığı seviyedir.

DEBUG : Developement aşamasına yönelik loglama seviyesidir.

INFO : Uygulama içerisindeki bilgileri loglayabildiğiniz seviyedir.

WARN : Hata olmayan fakat önemli bir durumun oluştuğunu belirtebileceğimiz seviye.

ERROR : Hata durumunu belirten seviye. Sistem hala çalışır haldedir.

FATAL : Uygulamanın sonlanacağını, faaliyet gösteremeyeceğini belirten mesajlar için kullanılacak seviyedir.

OFF : Hiç bir mesajın loglanmadığı seviyedir.

 

Log’lanacak bilgiler file system tarafında ya da database’de kaydedilebilmektedir.

DBLog adında bir database oluşturalım ve Log kayıtlarını tutacağımız Log adında aşağıda olduğu gibi bir tablo yaratalım

CREATE TABLE [dbo].[Log] (
    [Id] [int] IDENTITY (1, 1) NOT NULL,
    [Date] [datetime] NOT NULL,
    [Thread] [varchar] (255) NOT NULL,
    [Level] [varchar] (50) NOT NULL,
    [Logger] [varchar] (255) NOT NULL,
    [Message] [varchar] (4000) NOT NULL,
    [Exception] [varchar] (2000) NULL
)

 

Uygulama içerisinde App.cofig ya da Web.config sayfalarının içerişini aşağıda olduğu gibi yapıp sadece connectionstring’ini değiştirmeniz yeterli olacaktır.

<?xmlversion="1.0"encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net"type="log4net.Config.Log4NetConfigurationSectionHandler,
Log4net"/>
  </configSections>
  <log4net>
    <root>
      <levelvalue="DEBUG" />
      <appender-refref="ADONetAppender" />
    </root>
    <appendername="ADONetAppender"type="log4net.Appender.ADONetAppender">
      <bufferSizevalue="100" />
      <connectionTypevalue="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionStringvalue="server=serveradi; database=databaseadi;trusted_connection=true;" />
      <commandTextvalue="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
      <parameter>
        <parameterNamevalue="@log_date"/>
        <dbTypevalue="DateTime"/>
        <layouttype="log4net.Layout.RawTimeStampLayout"/>
      </parameter>
      <parameter>
        <parameterNamevalue="@thread"/>
        <dbTypevalue="String"/>
        <sizevalue="255"/>
        <layouttype="log4net.Layout.PatternLayout">
          <conversionPatternvalue="%thread"/>
        </layout>
      </parameter>
      <parameter>
        <parameterNamevalue="@log_level"/>
        <dbTypevalue="String"/>
        <sizevalue="50"/>
        <layouttype="log4net.Layout.PatternLayout">
          <conversionPatternvalue="%level"/>
        </layout>
      </parameter>
      <parameter>
        <parameterNamevalue="@logger"/>
        <dbTypevalue="String"/>
        <sizevalue="255"/>
        <layouttype="log4net.Layout.PatternLayout">
          <conversionPatternvalue="%logger"/>
        </layout>
      </parameter>
      <parameter>
        <parameterNamevalue="@message"/>
        <dbTypevalue="String"/>
        <sizevalue="4000"/>
        <layouttype="log4net.Layout.PatternLayout">
          <conversionPatternvalue="%message"/>
        </layout>
      </parameter>
      <parameter>
        <parameterNamevalue="@exception"/>
        <dbTypevalue="String"/>
        <sizevalue="2000"/>
        <layouttype="log4net.Layout.ExceptionLayout"/>
      </parameter>
    </appender>
  </log4net>
</configuration>

CodeBehind tarafında ki kodlar ise şu şekilde olacaktır

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.
MethodBase.GetCurrentMethod().DeclaringType);
        private void button1_Click(object sender, EventArgs e)
        {
            log4net.Config.XmlConfigurator.Configure();
            log.Debug("log Debug");
            log.Info("log Info");
            log.Warn("log Warn");
            log.Error("log Error");
            log.Fatal("log Fatal");
        }

  

Bu işlemler sonrasında database’de ki tabloya kayıtlar insert olmuş olacaktır.

 

Android'den fazla C# kodu yazılan Google Hackathon'u :)

     ODTÜ Teknokent, Google Türkiye ve Amerika Birleşik Devletleri Büyükelçiliği iş birliği ile 16-17 Mayıs 2013 tarihinde Orta Doğu Teknik Üniversitesi’nde gerçekleşen “Social Entrepreneurship Hackathon” adlı yarışmaya Kadir Has Üniversitesi'ni temsilen 5 arkadaş katıldık.

         Aslında üniversitede ki hocam Selçuk Öğrenci bana ilk "Android hackathon var gitmek ister misin ?" diye sorduğunda ilk başta "tabi hocam hemen giderim, nerede ne zaman ?.. " gibi konuştuktan sonra kendi kendime bi sordum "Caner hayırdır ?.. Markette 16 tane uygulamam ver derken bu android market değil Windows Phone abicim..." falan filan derken bu düşüncemi sonrasında Selçuk hocamla da paylaştım ama o yinede benden katılmamı ve şakayla karışık takımın "Core" denen şeysi olmamı söyledi :)

Bende emir büyük yerden deyip tamam hocam elimden gelen neyse üstüne dahasını katarak arkadaşlara yardım edeceğimi söyledim. Neyse 15 Mayıs günü yola çıktık ve yaklaşık 6-7 saat içerisinde gece 23:15 gibi Ankara'ya vardık. Ankara dışından gelen öğrenciler TEDAS Misafirhanesi'nde konaklayacak diye söylemişlerdi bizde geceyi orada geçirdik.Sabah ODTU Kültür Merkezine geçtik ve orada açılış konuşmasının olacağı salona gittik. Google Türkiye ekibinden, ODTU Teknopark ekibinden, ABD Büyük elçiliğinden ve Teknoloji bakanlığından gelen konuşmacıları dinledikten sonra 2-3 saatlik bir ara verdik ve sonradan 22 saat sürecek olan non-stop coding yani Hackathon başladı. Arkadaşlarla geliştirmeye karar verdiğimiz uygulamanın adı "EBS" Engelli Bildiri Sistemi'ydi. Ne yapacaktı EBS ; aslında içinde biraz Twitter biraz Instagram olan bir uygulama gibi düşünebiliriz.

        Engelli vatandaşlara hizmet verecek olan uygulamanın ana işlevi şu şekilde olacak; diyelim ki engelli bir   vatandaşımız sokakta yolda giderken kendisine engel teşkil eden bir durumla karşılaştığında uygulamasını açıp lokasyon bilgisine göre bulunduğu yerin Belediyesi'ne Fotograf, Açıklama, Yer Bilgilerini göndererek engel hakkında bildiri/şikayet yapabiliyor olacaktı. Sağtarafta bulunan fotoğrafı uzun bir süre önce internette görmüştüm örnek olacağını düşünerek paylaşmak istedim. Bu vatandaşımızı örnek alacak olduğumuzda ;

        Engelli vatandaş bu karşılaştığı engel karşısında uygulamasını açıp sorumlu belediyeye sorunun fotoğrafını çekip, açıklamasını yazıp gönder butonuna basacak ve bu bildiri Belediye nin sahip olduğu Web arayüzüne düşüp görüntülenecek Belediye tarafından görüntülenecek ve sorun giderildiğinde o şikayeti yapan vatandaş mail yoluyla "Sorun giderilmiştir" şeklinde bilgilendirilecek.

    Aslında fikir bence gayet güzeldi çünkü etkinliğin adı Sosyal Girişimcilik olduğundan uygulamanın içeriği hem Sosyal olmalıydı ve toplumsal bir soruna parmak basıyor olması gerekiyordu. 

Yazılımsal olarak neler gerekli diye düşündüğümüzde ;

  1. Öncelikle Server'da tutulan Sağlam bir Database 
  2. Mobil uygulama ile iletişimi sağlayıp bütün ihtiyaçlara cevap verecek iyi bir WebService,
  3. Belediyeler tarafında gelen bildirimleri görüntülemek için kullanılacak fonksiyonel bir Web Sayfası.
  4. Ve tabi son olarak da Android uygulaması :)

        1, 2 ve 3. şıklar benim yapacağım konulardı. İlk olarak MS-SQL kullanarak kullanışlı bir Database geliştirdim ve bu Database'i Azure Cloud servisimde sakladım. Sonrasında WCF kullanarak json formatında yayın yapan bir adet Web Service geliştirdim. En son olarak da ASP.Net kullanarak belediyeler için bir adet Web Sayfası geliştirdim. Şaka gibi ama bütün bunlar 6 saat içerisinde bitmişti Hackathon bu olsa gerek Smile.

Android uygulaması üzerinde çalışan arkadaşlar o sırada geliştirmeye devam ediyorlardı. 22 saatin sonunda maalesef arkadaşlar Android uygulamasını tam istediğimiz haliyle yetiştiremediler Frown Sunumumuzu yaptık ve sıralamaların açıklanmamıştı ve birincide olamamıştık.

Aslında bi ara şey diye düşünmedim değil; "Acaba çok mu fazla Microsoft'u işin içerisine soktum ?.." çünkü baktığımızda üstte saydığım gibi yazılımsal olarak 4 adet görev yada geliştirilecek yapı vardı ve bunlardan 3 tanesinde tamamiyle Microsoft'un izi vardı, MS-SQL Database, WCF WebService ve Asp.Net Web Sayfası :) Etkinlik sonunda arkadaşlarla oturup bi baktığımızda şaka maka Android kodundan fazla C# vardı işin içerisinde Cool 

Ama her şeye rağmen gayet güzel ve eğlenceli bir hackathon oldu, kişisel deneyim olarak bir çok şey kazandım gibi zira önümüzdeki sene Microsoft'un her yıl düzenlediği Imagine Cup yarışmasına katılmayı düşünüyordum ve bu deneyim benim için gerek sunum noktasında, gerek takım olarak çalışabilme konusunda gerekse işin sosyallik kısmında son derece katkıları oldu diye düşünüyorum. Umarım Selçuk hoca bize ilerleyen zamanlarda da bu tür görevler paslar ve bizde okulumuzu (1. olamazsakda) en iyi şekilde temsil etmeye çalışırız Laughing

 

 

Windows 8.1 Tanıtım Videosu Yayınlandı

Windows 8'e gelecek en büyük ve en kapsamlı güncelleme olması beklenen Windows 8.1'in kullanım videosu yayınlandı.

Windows 8 ilk çıktığı günden buyana birçok konuda eleştirilse de yayınlanacak olan 8.1 güncellemesi ile birlikte Microsoft'un birçok değişiklik yaparak eleştirilere cevap vereceği söyleniyordu. 

26 Haziranda düzenlenecek olan Microsoft Build geliştirici konferansında kullanıma sunulacak Windows 8.1 güncellemesinden önce Microsoft dün yayınladığı video ile birlikte Windows 8.1'de ne gibi değişiklikler var duyurmuş oldu.

Kısaca ne gibi deşiklikler var dersek ;

      • Herkesin merakla beklediği "Başlat" butonu geri gelmemiş gibi duruyor,
      • Uygulamaları Kategorize edebilme özelliği,
      • Birden fazla uygulama Tile' larını seçip aynı anda taşıyabilme,
      • Metro arayüzünde hareketli duvar kağıdı özelliği,
      • Metro arayüzünde bulunan her bölümün tema rengini değiştirebilme,
      • Yenilenmiş Skydrive uygulaması
      • Denetim Masası'ndan yapılan bütün işlemleri yeni eklenen Ayarlar bölümünden yapabilme,
      • Lock Screen'de hareketli arka plan resimleri ekleme,
      • Daha büyük Tile oluşturabilme özelliği,
      • Metro arayüzde iken ekranı aşağıdan yukarıya doğru çektiğinizde açılan "All Apps" sayfası,
      • Uygulamaları Kategorize edebilme özelliği,
      • Yeni Search uygulaması ile birlikte aranan her kelimeyle ilgili bulunan sonuçların kullanıcıya kategorilenmiş olarak sunulması,

 

  

IIS Network Load Balancing

IIS Load Balancing Nasıl Yapılır ?

 

IIS üzerinde Load Balancing (NLB) Network Load Balancing Manager Programı ile yapılır , ağ yükünün yük dengeleme ve hata toleransına bağlı olarak birden fazla sunucuya dağılımını yapan servistir.

 Server Üzerinde Network Load Balancing  Aktifleştirme (NLB)

 1.       Open the Server Manager of your Windows Server by opening your Start Menu and clicking Administrative Tools      » Server Manager.

2.       In the navigation tree on the left, click Features.

3.       In the right pane, click Add Features.

4.       From the list of features that appear, select Network Load Balancing and click Next » Install. An installation progress bar appears.

5.       When installation is finished, click Close.

 Cluster yapısı:Network üzerinde tek bir sistem olarak görünen bir grup server.

Node: Cluster içerisindeki sunuculara verilen ad..

NLB cluster max 32 Node’dan oluşur.

 Cluster yapıları Aktif/Aktif ya da Aktif/Pasif çalışabilir.

Aktifdurumdaki sunucu cluster yapısı içerisinde, cluster yapısına gelen isteklere doğrudan cevap veren sunucudur.

Pasifolan sunucu ise cluster yapısı içerisinde Aktif durumdaki makinede donanımsal ya da yazılımsal bir sorun olması durumunda onun yerine geçebilecek şekilde hazırda bekleyen sunucudur. 

Aktif/Aktif Cluster yapısı ağ üzerinde yük dengeleme işlevini yerine getirir. Aktif/Pasif Cluster yapısı ise hata toleransını sağlamaya yöneliktir. Aktif/ Aktif Cluster yapısına Load-Balancing Cluster, Aktif/Pasif Cluster yapısına ise Fault-Toleranced Cluster denilebilir.

 

Network Load Balancingdonanımsal ya da yazılımsal olarak sağlanabilir. Donanımsal Load Balancing cihazları NLB’yi Aktif/Aktif yaparlarken Microsoft Server 2003 işletim sistemi içerisinde NLB Manager ile Load Balance yapılandırılırken Aktif/Aktif  ya da Aktif/Pasif Cluster yapılabilir.

NLB’de kullanıcıların Session bilgileri tutulamıyor, bu yüzden IIS sunucuları yapılandırarak bilgileri tutmak gerekir.

Session tutmadığımız durumda kullanıcının NLB yapısından kaynaklanan bir şekilde bir sunucuya ya da diğer sunucuya gönderilmesi sonucu session bilgileri kaybolacaktır.

Örneğin kullanıcı, sunuculardan birinde, sayfalardan biri için şifre girdiğinde sayfa içerisindeki linklerden birine basarak başka bir sayfaya gitmek istediğinde, NLB yapısı bu istek sonucu kullanıcıyı başka bir sunucuya yönlendirirse web browser kullanıcıya tekrar şifre soracaktır. 

Web Uygulamaları için session bilgileri IIS tarafından asp.net yardımı ile tutulabilir.

Session verilerini tutmanın 3 türlü yöntemi vardır:

1-    In Process Mode(inProc)

inProc moda session bilgileri aspnet_wp.exe dosyasına bağlı olarak her sunucu içinde bireysel olarak tutulur

2-    State Server Mode

State Server Mode’da ise session bilgileri serileştirilerek sunucuların RAM’lerinde bir birinden bağımsız process’ler olarak tutulur

3-    Out of Process – SQL Server Mode(outProc)

SQL Server Mode’da session bilgileri serileştirilmiş yani serializable bir şekilde SQLsunucuda tutulur

Çalışma Şekli..

NLB sürücüsü NIC sürücüsü ile IP protokolü arasına yerleşir ve böylece tüm NLB kümesi üyelerine gelen her paketi alıp inceler. Paket kablodan Cluster’a geldiğinde her node paketi alır ve inceler ve cluster çapında belirtilmiş kurallara göre paketi üst katmanda bulunan IP protokolüne iletir veya paket daha NLB sürücüsündeyken atılır. Böylece trafik node’lar arasında paylaştırılır. Kısaca tüm node’lar Cluster’a gelen trafiği alır ama tüm node’lar cevap vermez.

Sorun Olduğunda..

NLB Cluster üyesi olan bir sunucu hata verdiğinde NLB Cluster grubundaki diğer sunucular, offline duruma düşen sunucunun üzerindeki iş yükünü üstlenirler. Hata veren sunucu tekrar online durumuna geçtiğinde, NLB servisi görev dağıtımını yeniden düzenleyerek online duruma geçen sunucuya yeni görevini atamaktadır

 Network Load Balanacing yönetimi için temel olarak Network Load Balancing Manager snap-in kullanılır. Bununla birlikte network kartı özellikleri penceresinden de NLB ayarları yapılabilir.

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

 

Yeni Başlat Butonu Göründü Gibi :)

Windows 8'in 8.1 güncellemesi ile birlikte geri geleceği söylenen başlat butonu göründü.

 

Geçtiğimiz yıl kullanıma sunulan Windows 8 kullanıcılar tarafından beğenilse de diğer Windows sürümlerinde alışılan Başlat menüsü Windows 8 de yoktu ve Microsoft'un kullanıcılar tarafından önemli eleştiri oklarına tutulmasına neden olmuştu.Son çıkan haberlere göre ise Microsoft bu eleştirilere bir cevap olarak Haziran ayında çıkarılması tahmin edilen Windows 8.1(Windows Blue) güncellemesi ile birlikte birçok eksiklik ve yeniliklerin yanında Başlat menüsünü de geri getireceği tahmin ediliyor.

 

Sızdırılan görüntüde Windows XP yada Windows 7'de alışık olmadğımız sade ve hoş bir tasarım olduğu dikkat çekiyor.