21 Ocak 2014 Salı

WPF STYLE

WPF’te Style’ların farklı farklı kullanım yöntemleri vardır:
1.) Resource Dictionary oluşturup tasarıya eklemek:
Tasarı (proje) üzerinde sağ tıklayın, Add, Resource Dictionary, Bir isim girin (ben başına rd koymayı tercih ediyorum). Oluşturduğumuz kaynak dosyayı her User Control ya da Window’da kullanabilmemiz için App.xaml doyasına geçip aşağıdaki gibi bir tanımlama yapıyoruz:

       
           
               
                    rdNesneler.xaml"/>
               
           
       
   
Source özelliğine tanımladığımız rdNesneler.xaml kaynak dosyası istediğimiz her Window ve User Control’de kullanabileceğimiz Style’ları tutacak. Bu xaml’ın içinde oluşturduğumuz her Style dosyasını (Elbette x:key değeri olmak zorunda) her yerde kullanabiliriz.
2.) Window ya da UserControl içerisinde oluşturup kullanmak:
Resource Dictionary gibi bu yöntem de her yerde kullanıma açıktır. RD’den farkı yalnızca oluşturulduğu sınıf içerisinde çağırılabilmesidir. Örneğin aşağıdaki gibi bir Button Sitilimiz olsun:

< Style x:Key=”dugmeSitili” TargetType=”Button”>
< Setter Property=”Background” Value=”WhiteSmoke” />

< Setter Property=”Padding” Value=”8,4″ />
< Setter Property=”Margin” Value=”4″ />
< Setter Property=”FontFamily” Value=”Trebuchet MS”/>
< /Style>
< /Window.Resources>

< Button Style=”{StaticResource dugmeSitili}” Content=”Mehmet ” Margin=”61,182,227,52″ />
< Button Style=”{StaticResource dugmeSitili}” Content=”Mehmet ” Margin=”71,96,239,135″ />
< /Grid>
Görüldüğü gibi Sitil özelliklerimiz Application.Resource yerine Window.Resource altında tanımlandı. Bu yüzden yalnızca bu Window altında çalışacaktır. Diğer önemli bir noktaysa her iki düğme için de aynı Sitil tanımlamasının yapılmış olmasıdır. Eğer istersek bu penceredeki tüm düğmeler için tek bir kere tanımlama yaparak da Sitil belirleyelebiliriz. Aşağıdaki XAML’ı inceleyelim:






Kodlardan da anlaşılabileceği gibi Window.Resources altında bir kere tanımlanan Sitil, düğmelerde tek tek belirtilmeden uygulanmıştır. Bunun nedeni TargetType özelliğine Button değerinin atanmış olmasıdır. Aynı durum tüm diğer nesneler için de söz konusudur.

30 Ekim 2013 Çarşamba

Toad Oracle’da Türkçe Karakter Sorunu ve Çözümü


Toad dan Oracle veritabanına bağlanıp dataları çektiğimde verilerdeki Türkçe karakterlirin yerine ''?'' işareti çıkması.


Çözümü şu şekilde;
Regeditten NLS_LANG değerini bulup değerini TURKISH_TURKEY.TR8MSWIN1254 olarak değiştirmek.( Aynı değer birden fazla olabilir. Eğer oracle'ı tek bi seferde kurmadıysanız ve kaldırma yapamadan yeniden üzerinde kurmak istediğimizde her yeni Oracle ürünü kurulumu ile farklı bir ORACLE_HOME altında değerler oluşturur.Toad bunlardan birini kullanıyordur.Bunun için doğru NLS_LANG değerini değiştirdiğinizden emin olun.)


Bunları yaptıktan sonra hala düzelmemiş ise son çare olarak Control Panel\Clock,Language, and Region (Denetim Masası\Saat, Dil ve Bölge) giderek Region and Language (Bölge ve Dil ) kısmına gelerek burdaki Formats,Location,Keybord (Biçim,Yer,Klavye ) vs.. bütün ayarları Turkish (Turkey) olarak ayarlamanız gerekebilir.

26 Eylül 2013 Perşembe

ROW_NUMBER Kulanımı Örnek, Bir fatura bazında, fatura detaylarına sıra numarası verilmesi



select (mod(emp_id,5)-emp_id)*-1 page, seq_no,tutar FROM (
SELECT seq_no, tutar, ROW_NUMBER()
   OVER (PARTITION BY seq_no ORDER BY seq_no) AS emp_id
   FROM ser_hiz_det
   where seq_no in ('680501','81127')
   )
   ORDER BY seq_no


SELECT department_id, last_name, employee_id, ROW_NUMBER()
   OVER (PARTITION BY department_id ORDER BY employee_id) AS emp_id
   FROM employees;

DEPARTMENT_ID LAST_NAME                 EMPLOYEE_ID     EMP_ID
------------- ------------------------- ----------- ----------
           10 Whalen                            200          1
           20 Hartstein                         201          1
           20 Fay                               202          2
           30 Raphaely                          114          1
           30 Khoo                              115          2
           30 Baida                             116          3
           30 Tobias                            117          4
           30 Himuro                            118          5
           30 Colmenares                        119          6
           40 Mavris                            203          1
. . .
          100 Popp                              113          6
          110 Higgins                           205          1
          110 Gietz                             206          2

27 Temmuz 2013 Cumartesi

SQL - Pivot Table Nedir Nasıl Kullanılır

MS SQL Server;

Pivot table bir tablodaki verileri yatay olarak göstermemizi sağlar yani satırlarda bulunan bilgileri istediğimiz alanlara göre sutunlara çevirir.  Özellikle rapor hazırlarken verileri daha anlaşılır ve düzenli hale getirmemizi sağlar. Örneğin bir sipariş tablomuz var. Bir müşterinin verdiği her bir sipariş bir satırda gösteriliyor. Her müşteri için son 6 aylık sipariş bilgilerini görmek istiyoruz. Birinci yöntem her hareketi alt alta yazmak olabilir ama daha anlaşılır ve düzenli bir rapor için her müşteri bir satırda yer almalı ve bu satırda son altı aya ait tüm sipariş tutarlarının toplamı gösterilmelidir. Bu durumda pivot table kullanmak imdadımıza yetişir. Bu örneğin daha iyi anlaşılması için küçük bir çalışma yapalım.
İlk olarak basit bir tablo yapalım ve içine aşağıdaki örnek verileri atalım.
CREATE TABLE [dbo].[Siparis](
      [SiparisID] [int] IDENTITY(1,1) NOT NULL,
      [MusteriAdSoyad] [varchar](80) NULL,
      [UrunAdi] [varchar](50) NULL,
      [Tutar] [decimal](10, 2) NULL,
      [Donem] [int] NULL
) ON [PRIMARY]
SiparisIDMusteriAdSoyadUrunAdiTutarDonem
    Sabri KUNTApple IPAD1025201001
    Ali DEMİRLG Netbook950200912
    Metin TOSUNPacketBell Notbook1200200911
    Sabri KUNTNikon D50001480200912
    Sabri KUNTMicrosoft Mouse100200912
    Metin TOSUNHP Printer250200912
    Metin TOSUNHP Server2100200911
    Ali DEMİRHP Pavilion1600200912
   Ali DEMİRADSL Modem80200911
Şimdi müşteri başına aylık olarak ne kadar harcama yapıldığını görmek için bir sorgu yazalım.
SELECT
       MusteriAdSoyad
      ,Donem
      ,sum(Tutar) as ToplamTutar    
  FROM Siparis
  group by MusteriAdSoyad ,Donem
Yukarıdaki sorgu sonucu aşağıdaki gibi her donem için müşterilerin kaç liralık harcama yaptıklarını görürüz.

MusteriAdSoyadDonemToplamTutar
Ali DEMİR20091180
Metin TOSUN2009113300
Ali DEMİR2009122550
Metin TOSUN200912250
Sabri KUNT2009121580
Sabri KUNT2010011025
Peki, bizim binlerce müşterimiz olsa ve toplam 1 yıl boyunca her ay ne kadarlık harcamala yaptıklarını görmek istersek yukarıdaki gibi bir sorgunun sonucunda içinden çıkamayacağımız büyük bir tablomuz olurdu. Her müşteri için aylık harcama miktarlarını farklı satırlarda göstermek hiç de işimize gelmezdi.
Şimdi ise her müşteriyi tek bir satırda gösterelim ve sipariş verdikleri her ay içinde bir kolon açarak bunun altında toplam sipariş tutarlarını gösterelim. Pivot table için Siparis tablosunu gruplayarak kullanmamız gerekiyor. Çünkü sipariş tablosunda her ay için müşteri bazında birden fazla harcama var. Yukarıda yaptığımız gruplamayı yeni bir tablo olarak alıp bunu pivot yaparsak istediğimiz sonuca ulaşabiliriz.
SELECT *
FROM (
      SELECT
       MusteriAdSoyad
      ,Donem
      ,sum(Tutar) as ToplamTutar 
      FROM Siparis
      group by MusteriAdSoyad ,Donem
     ) as gTablo
PIVOT
(
  SUM(ToplamTutar)
  FOR Donem IN ([200911],[200912],[201001])
)
AS p
Yukarıdaki sorgu sonucu aşağıdaki gibi her ay bir kolon olacak şeklide bilgilerimiz yatayda dizildi
MusteriAdSoyad200911200912
Ali DEMİR802550
Metin TOSUN3300250
Sabri KUNTNULL1580

Gördüğünüz gibi bu şeklide bir tablo oluşturmak sonucun daha düzenli olmasını sağladığı gibi incelenmesini kolaylaştırır.

ORACLE;

SELECT ...
FROM   ...
PIVOT [XML]
   ( pivot_clause
     pivot_for_clause
     pivot_in_clause )
WHERE  ...

SQL> WITH pivot_data AS (
            SELECT deptno, job, sal
            FROM   emp
            )
    SELECT *
    FROM   pivot_data
    PIVOT (
               SUM(sal)        --<-- pivot_clause="" span="">
           FOR deptno          --<-- pivot_for_clause="" span="">
          IN  (10,20,30,40)   --<-- pivot_in_clause="" span="">
         );

JOB               10         20         30         40
--------- ---------- ---------- ---------- ----------
CLERK           1430       2090       1045
SALESMAN                              6160
PRESIDENT       5500
MANAGER         2695     3272.5       3135
ANALYST                    6600



16 Temmuz 2013 Salı

C# SQL Üzerinden XML Dosya yaratma

SqlConnection baglanti = new SqlConnection("Server=GENÇAY-GENÇAY;Database=Northwind;Trusted_Connection=True;");
SqlCommand cmd = new SqlCommand("Select * from Personeller",baglanti);

baglanti.Open();

SqlDataReader dr = cmd.ExecuteReader();

XmlTextWriter XMLDosyasi = new XmlTextWriter("Personeller.xml",Encoding.GetEncoding(1254));

//XmlTextWriter nesnesi ile "Personeller.xml" adındaki XML dosyasının nereye olusturulacağını belirledik.
//Encoding.GetEncoding(1254) = Türkçe karakter dil koduna göre XML dosyasını encode etmesini söyledik.

XMLDosyasi.Formatting = Formatting.Indented;

//Formatting özelliği, XML nodelarının girintili yazılacağını belirtir.

XMLDosyasi.WriteStartDocument();

//XML dosyasına yazılmasına başlayacağını bildirdik.

XMLDosyasi.WriteComment("Burada personellerimiz listelenmektedir.");

//Bu metod ile XML dosyamıza yorum(Comment) eklenmesi sağlanır.
//Bundan sonra elemanları yazdırmaya başlayalım...

XMLDosyasi.WriteStartElement("Personeller");

//Bu metod ile XML dosyasının root elemanı belirleniyor.

while (dr.Read())
{
    XMLDosyasi.WriteStartElement("Personel");

    //WriteStartElement() metodu ile yazılan ilk eleman root eleman olur.Daha sonrakiler root un içindeki ana nodelar olur.

    XMLDosyasi.WriteAttributeString("No", dr["PersonelID"].ToString());

    //WriteAttributeString() metodu ile herhangi bir node a Attribute yazılabilir.

    for (int i = 0; i < dr.FieldCount; i++)
    {
        XMLDosyasi.WriteElementString(dr.GetName(i), dr[i].ToString());
        //Node ları getirtiyoruz.
    }

    XMLDosyasi.WriteEndElement();

    //Oluşturulan ana node kapatılıyor.
}

XMLDosyasi.WriteEndElement();

//Root eleman kapatılıyor.

XMLDosyasi.WriteEndDocument();

//XML sayfasının yazma işlevi bitti.

XMLDosyasi.Close();

baglanti.Close();

MessageBox.Show("İşlem Tamamlandı.");

14 Temmuz 2013 Pazar

C# - DataGrid - Binding

private void frmDGV_Load(object sender, EventArgs e)
{
    //dummy data
    List lstStaff = new List();
    lstStaff.Add(new Staff()
    {
        ID = 1,
        Name = "XX"
    });
    lstStaff.Add(new Staff()
    {
        ID = 2,
        Name = "YY"
    });

    
    BindingSource binding = new BindingSource();
    binding.DataSource = lstStaff;

    dataGridView1.DataSource = binding;
}


12 Temmuz 2013 Cuma

ORA-12011 Hata mesajı

09:24:52 Info: Job #565 could not be executed.
ORA-12011: 1 anlık goruntulerini kendiliğinden yenilemeyi basaramadı
ORA-06512: konum "SYS.DBMS_IJOB", satır 651
ORA-06512: konum "SYS.DBMS_JOB", satır 284
ORA-06512: konum satır 1

 Alınan hatanın kaynağı, Job ile çalıştırılmak istenen prosedür veya uygulamanın tanımlı bulunduğu Kullanıcı üzerinden Job ın oluşturulması gerekir. Farklı kullanıcı ile oluşlturulan JOB larda bu hata mesajı alınmaktadır.