August 26, 2008
@ 10:35 PM
Bazen aynı database içindeki tablolar ya da farklı database lerdeki tabloları ya da farklı sunuculardaki farklı databaselerdeki tabloları karşılaştırmak isteyebiliriz. Sql 2005'i kurduğunuz da C:\Program Files\Microsoft SQL Server\90\COM dizininde tablediff.exe isimli bir araç ile bu karşılaştırmaları yapabiliyoruz. Aşağıdaki resimde gördüğünüz gibi aynı sunucu üzerinde diffTest ve difftest1 isimli iki farklı database oluşturdum. Her iki database'e de kullanicilar isimli tablo ekledim. Ve her ikisine de farklı veriler girdim.

   

Şimdi geldi tablediff.exe yi kullanmaya. Bu araç ile ilgili detaylı bilgiyi şurdan edinebilirsiniz. Göreceğiniz üzere bir hayli fazla parametre alarak çok kapsamlı işler yapabilen bir araç. Ben sadece çok basit olarak iki tabloyu karşılaştıran ve farkları bana ismi "fark" olan bir tablo şeklinde vermesini istedim. Bunun için komut satırından aracı aşağıdaki gibi kullandım.

C:\Program Files\Microsoft SQL Server\90\COM>tablediff.exe -sourceserver ".\sql2005" -sourcedatabase "difftest" -sourcetable "kullanicilar" -destinationserver "
.\sql2005" -destinationdatabase "difftest1" -destinationtable "kullanicilar" -et "fark"

Bu kullanımda difftest1 database'inde fark isimli bir tablo oluşturuyor.

Birbaşka örnek olarak da, her iki tablodaki farkları giderecek bir sql sorgusu üretmek için yine komut satırından aracı aşağıdaki gibi kullanmak gerekiyor.

C:\Program Files\Microsoft SQL Server\90\COM>tablediff.exe -sourceserver ".\sql2005" -sourcedatabase "difftest" -sourcetable "kullanicilar" -destinationserver "
.\sql2005" -destinationdatabase "difftest1" -destinationtable "kullanicilar" -f "farklari_gider.sql"

Bu işlem sonucunda oluşan dosyanın içeriği aşağıdaki gibi oldu.

-- Host: .\sql2005
-- Database: [difftest1]
-- Table: [dbo].[kullanicilar]
SET IDENTITY_INSERT [dbo].[kullanicilar] ON
UPDATE [dbo].[kullanicilar] SET [ad]='osman1' WHERE [id] = 2
UPDATE [dbo].[kullanicilar] SET [ad]='murat1' WHERE [id] = 3
SET IDENTITY_INSERT [dbo].[kullanicilar] OFF

Bu T-SQL'i çalıştırdığınızda her iki database'deki tabloların içerikleri eşitlenmiş olacaktır. Aracın geniş kullanımını yukarda belirttiğim linkten detaylı inceleyebilirsiniz.



 
Categories: Inceleme

Microsoft klasiği olan bir klasik olan Service Pack haberi ile yine karşınızdayız :)

Özellikle WPF ile ilgili çalışmalar yapanların şiddetle kurmalarını tavsiye ediyorum.Şurdaki linkden bu service pack ile neleri tamir ettikleri hakkında detaylı bilgi mevcut.

Burdan Vs.NET 2008 ( 831.3 MB lik iso dosyasi da şurda) ve burdan da .NET Framework 3.5 için gerekli Service Pack leri indirebilirsiniz.

Overview kısmına gözatmanızda fayda var derim. Kurulumdan önce de readme dokümanını okuyunuz. Örneğin vista kullanıcıları için

Visual Studio 2008 SP1 installation fails when the Windows Vista sidebar is on.

To resolve this issue:

1. Right-click the Sidebar icon in the notification area, at the far right of the taskbar.
2. Click "Exit".

açıklaması ile beni benden almıştır :)))))

 


 
Categories: .NET

1.YOL Extension metodları ve lambda expression kullanarak

foreach (IGrouping<string, string> group in Directory.GetFiles(Path.GetTempPath()).GroupBy(file => Path.GetExtension(file)))
{
    listBox1.Items.Add("--- " + group.Key + " ---");
    foreach (string file in group)
    {
        listBox1.Items.Add(file);
    }
}

2.YOL LINQ Expression Kullanarak

var sonuc = from c in Directory.GetFiles(Path.GetTempPath())
                
group new
                        
{
                             DosyaAd = c
                         }
                 by Path.GetExtension(c);

foreach (var  group in sonuc)
{
    listBox1.Items.Add("--- "+group.Key+" ---");
    foreach (var s in group)
       
listBox1.Items.Add(s.DosyaAd);
}

3.YOL LINQ Expression Kullanarak (Tipler Biliniyor)

IEnumerable<IGrouping<string,string>> sonuc = from c in Directory.GetFiles(Path.GetTempPath())
                                                               
group c
                                                               
by Path.GetExtension(c);

foreach (IGrouping<string,string> group in sonuc)
{
   
listBox1.Items.Add(group.Key);
   
foreach (string file in group)
       
listBox1.Items.Add(file);
}


 
Categories: C# | Code

August 5, 2008
@ 11:22 AM
C# 3.0 dili ile birlikte gelen yeni özellikleri şimdiye kadar duymayan kalmadı denebilir. Gerek seminerler olsun gerekse Türkçe içerikli makalelerde bunlara değinildi.
Yeniliklerden birisi olan Lambda Expressionlar ile artık C# 3.0 bir "fonksiyonel programlama dilidir" diyebiliriz. İlerki zamanlarda bunlarla ilgili kod örneklerine de yer vereceğim.

Belirsiz Tiplerle (Anonymous Types) ilgili bir örnek kod olarak belirsiz tiplerden oluşan bir dizi nasıl oluştururuz buna bakalım.

	  var bilinmeyenTipdenDizi = new[] 
          {
              new {Ad="oguz",Soyad="yagmur"},
              new {Ad="sefer",Soyad="algan"},
          };

          foreach (var bilinmeyenTip in bilinmeyenTipdenDizi)
          {
              MessageBox.Show(bilinmeyenTip.Ad +" " + bilinmeyenTip.Soyad);
          }
Burda dikkat edilecek nokta dizinin bilinmeyen tipli elemanlarının aynı imzaya sahip olması. Nihayetinde bildiğimiz gibi belirsiz tiplerde IL de belirli bir tipe dönüştürülüyor ;)




 
Categories: C# | Code