November, 2009 | Engin Polat'ın Windows, Web, Mobile ve Game içerikli programcılık sitesi

Arşiv

2009 November ayı için arşiv

Sql Server CSV (Comma Seperated Value) çıktı üretme

27 November 2009 2 yorum

Özellikle katalog tablolarının CSV çıktılarına sıklıkla ihtiyaç duyarız. Aşağıdaki sql script’ini kullanarak, siz de tablolarınızdan CSV çıktı alabilirsiniz.

Öncelikle tablomuzun orjinal haline bakalım;

SELECT Name
FROM HumanResources.Shift WITH (NOLOCK)

sql-csv-output_1

Şimdi öyle bir sql sorgusu yazacağız ki, çıktımız şu şekilde olacak;

Day, Evening, Night

SELECT
	SUBSTRING((
		SELECT ', ' + Name
		FROM HumanResources.Shift WITH (NOLOCK)
		FOR XML PATH('')
	), 3, 8000) AS CSV

Sorguyu FOR XML anahtar kelimeleri ile çalıştırdığımıza ve PATH olarak ” (boş string) verdiğimize dikkat edin.

SELECT ', ' + Name
FROM HumanResources.Shift WITH (NOLOCK)
FOR XML PATH('')

Böylece aşağıdaki sonucu elde etmiş olduk;

sql-csv-output_2

Son olarak, sql sorgusunu SUBSTRING fonksiyonu içerisine koyduk, böylece baştaki virgül ve boşluk karakterlerinden (“, “) kurtulmuş olduk.

sql-csv-output_3

Sql Server ServerProperty Fonksiyonu

26 November 2009 Yorum yapılmamış

Sql Server’ın çalıştığı sunucu ile ilgili özellik bilgilerine sorgu ile erişmek istediğimizde kullanabileceğimiz bir fonksiyon var;

SERVERPROPERTY ( propertyname )

Örnek;

SELECT
	SERVERPROPERTY('edition') AS SURUM,
	SERVERPROPERTY('productlevel') AS SEVIYE,
	SERVERPROPERTY('productversion') AS VERSIYON,
	SERVERPROPERTY('servername') AS SUNUCU_ADI

SERVERPROPERTY fonksiyonunun alabileceği tüm propertyname parametreleri ve açıklamaları için şuradaki MSDN sayfasına bakınız.

Silverlight 4 TextTrimming özelliği

25 November 2009 Yorum yapılmamış

Silverlight 3 ve öncesi versiyonlarda, yazı alanına sığmayan metinleri, üç nokta ekleyerek trim etmek için, kendi kontrolümüzü yazmamız gerekiyordu.

Mesela, elimizde şöyle uzun bir yazı olsun;

Silverlight helps you create rich web applications that run on Mac OS, Windows, and Linux. Welcome to a new level of engaging, rich, safe, secure, and scalable cross-platform experience.

Bu yazıyı, 250px’lik bir metin alanında göstermemiz lazım, ama sığmayan kısımları yanyana üç nokta ile göstermemiz gerekiyor.

Silverlight helps you create rich web applications …

Silverlight 4 versiyonundan önce, bu isteğimizi yerine getirmek için, kendi TextBlock kontrolümüzü yazmamız gerekirdi.

Silverlight 4 versiyonla birlikte ise, TextBlock kontrolünün TextTrimming=”WordEllipsis” özelliğini kullanabiliyoruz.

Örnek kod:

<TextBlock FontSize="16" TextTrimming="WordEllipsis" Width="250"
Text="Silverlight helps you create rich web applications that run on Mac OS, Windows, and Linux. Welcome to a new level of engaging, rich, safe, secure, and scalable cross-platform experience." />

PDC 2009’da Silverlight 4 Beta yayınlandı

24 November 2009 Yorum yapılmamış

18 Kasım 2009 tarihinde, Microsoft PDC’09 (Microsoft Proffessional Developers Conference 2009) konferansında konuşmacı Scott Gutherie, Silverlight 4 Beta’nın yayınlandığını duyurdu.

Resmi sitesi silverlight.net‘te yer alan şu sayfadan ayrıntılı bilgiye ulaşabilirsiniz.

Channel9’da yeralan video‘dan yenilik olarak nelerin geleceğini izleyebilirsiniz.

Yeniliklerden kısaca bahsetmek gerekirse;

  • Yazdırma ile ilgili yenilikler
  • Zengin Metin Alanı kontrolünün eklenmesi
  • Datagrid üzerinde kolonlara otomatik genişlik verilebilmesi ve Kopyalama desteği
  • Fare tekerlerine gelen destek
  • Sağ tuş desteği
  • Windows’un panosuna erişim imkanı
  • Browser içerisindeki silverlight nesnesinin sürükle-bırak tekniğinde bırakma noktası olarak belirlenebilmesi
  • Webcamerası ve Mikrofon desteği
  • PNG dosya türünün tüm formatlarına tam destek
  • Out-Of-Browser moduna daha çok destek
  • WebBrowser kontrolü
  • İstemci bilgisayarın dosya sistemine erişim yeteneği
  • Google Chrome desteği
  • Multi-touch desteği

Listenin tamamına ve açıklamalarına buradan ulaşabilirsiniz.

Silverlight ekibi 4. versiyonun betasını yayınlarken, Expression Blend ekibi de boş durmamış ve Silverlight 4 çıktı üretebilen Expression Blend versiyonunun beta’sını yayınlamış.

Microsoft Download’da yer alan şu sayfadan Expression Blend Preview for .Net 4 versiyonunu indirebilirsiniz.

DataTable ve DataReader nesnelerini yarıştıralım

23 November 2009 Yorum yapılmamış

.Net ortamında veriye erişim modeli olarak kullanabileceğimiz iki seçenek vardır; Bağlantılı (Connected) ve Bağlantısız (Disconnected) Ortam.

  • Bağlantılı veri erişim modelinde, veriye erişmek için DataReader classını,
  • Bağlantısız veri erişim modelinde ise, genellikle DataTable classını kullanırız.

Bu yazımda, bu iki class’ı benzer şartlar altında yarıştıracağız ve hangisinin veriyi daha hızlı getirdiğine karar vereceğiz.

DataTable_vs_DataReader

Projenin kaynak kodlarını buradan download edebilirsiniz.

Kaynak kodlara baktığınızda görebileceğiniz gibi, proje tek form’dan oluşuyor. Formun Load event’inde, AdventureWorks2008R2 veritabanına bağlantı açılıyor ve PR_TABLO_LISTESI procedure’ü çalıştırılıyor.

PR_TABLO_LISTESI procedure’ünün kodları;

CREATE PROCEDURE PR_TABLO_LISTESI
AS
DECLARE @T TABLE (TABLO_ADI VARCHAR(100), SATIR_SAYISI INT)

INSERT INTO @T
EXEC sp_msForEachTable 'SELECT ''?'', COUNT(*) FROM ? WITH (NOLOCK)'

SELECT * FROM @T ORDER BY SATIR_SAYISI DESC

Gördüğünüz gibi, procedure’ün yaptığı çok fazla birşey yok. Pek fazla bilinmeyen ve dökümante edilmemiş sp_msForEachTable sistem prosedür’ünü kullanarak veritabanında bulunan her tablonun ismini ve satır sayısını döndürüyor.

Bu sistem prosedür’ünün nasıl kullanıldığını başka bir yazıda anlatmayı planlıyorum. (Eminim BilgeAdam’daki öğrencilerim bu prosedür’ü hatırlayacaklardır)

Form’un Load eventinin devamında, prosedür’den dönen liste (tablo isimleri ve satır sayıları) lvTablolar ismindeki ListView component’ine dolduruluyor.

cmbTekrarAdet isimli combobox’da yer alan (5 Adet, 10 Adet, 20 Adet) elemanlarından varsayılan olarak 10 Adet elemanı seçili olarak geliyor. Bu combobox, testin peşpeşe kaç defa tekrar edeceğini belirliyor. Böylece bilgisayardaki anlık performans değişikliklerine karşı önlem almış oluyoruz.

Yarış Başlasın Butonunun Click event’inde, yeni bir Thread nesnesini YarisBaslasin() methodunu çalıştıracak şekilde oluşturuyoruz ve başlatıyoruz.

YarisBaslasin() methodunu Arayüz’den (User Interface : UI) ayrı bir thread’den başlatarak, test süresince formda oluşacak kilitlenmeleri önlemiş olduk.

Method’un içerisinde DataTableHesapla() ve DataReaderHesapla() methodları çağırılıyor.

Bu methodlarda TekrarAdet defa (cmbTekrarAdet kontrolünden geliyor) SqlConnection açılıyor, ListView’da seçili tabloya SELECT çekiliyor ve dönen kayıtların üzerinde tek tek geziliyor.

Son olarak, DataTable ve DataReader nesnelerinde bu işlemlerin ne kadar sürdüğü karşılaştırılıyor ve sonuç ekranın altındaki bir label’da gösteriliyor.

Süre ölçmek, ADO.NET Connected ve Disconnected Environment’ı karşılaştırmak için tek başına kullanılacak bir yöntem değil. Fakat en azından bir fikir verebilir.