September 2006 - Posts

SetDefaultInitFields

"Yazılımcı yazar, yazmayan kablocudur, sistemcidir" başlıklı yazıda belirttiğim üzere bir Code Generator programı üzerinde çalışıyordum.
 
SqlServer da bulunan Table,Stored Procedure  gibi nesenelere ulaşmak için .Net Framework 1.1 de kullandığımız DMO ( Database Management Object)'nun yerini .Net Frameowrk 2.0 da SMO (Sql Management Object) aldı.
 
SMO ile Sql Server 2005 sürümünde bulunan Stored Procedure ları listediğimde kendi Stored Procedure'lerim ile birlikte 1252 adet System Stored Procedure de geliyor.
 
StoredProcedure sınıfının IsSystemObject özelliğini sınayarak bir ComboBox'a atadığımda ise yine (1252 + kendi SP sayısınız) adet StoredProcedure nesnesi kontrol edilmiş oluyor. Her kontrol sırasında ilgili Stored Procedure objesini tüm özellikleri ile birlikte oluşturulduğu için bu işlem dakikaları aşıyor.
 
Bu problemi aşmak için yaptığım bir araştırmada üstad David Hayden'in sitesinde konu ile ilgili bir ipucuna rastladım :

Server SqlServer = new Server(conn);
SqlServer.SetDefaultInitFields(typeof(StoredProcedure), "IsSystemObject");

 
Server nesnemizi bu şekilde yapılandırdığımızda StoredProced nesnesinin IsSystemObject özelliğini hafızaya ( RAM ) aktarıyor. sorguladığımızda artık SqlServer gidip sormuyor. Hazıfadan okuyor ve sonucu daha hızlı elde ediyoruz.
 
...
foreach (StoredProcedure sp in db.StoredProcedures)
  
if (!sp.I
sSystemObject)
      clbStoredProcedures.Items.Add(sp.Name);
...


Açıklama
db : DataBase nesenesi
clbStoredProcedures : CheckedListBox nesnesi
Posted by Selçuk Yavuz | with no comments
Filed under: ,

C# 2.0 Komple Referans

Bana .Net'in kapılarını açan değerli hocam Osman Çelik verimli bir askerlik görevinden sonra elinde 672 sayfalık C# 2.0 Komple Referans kitabıyla döndü.
 
Kitabın ilk bölümünde dikkatimi çeken ve forumlarda imza niyetine kullanılacak değerde gördüğüm cümlelerini buraya aktarıyorum.
 
...
Aslında Windows Programcılığı Visual Basic dilinin geliştirilmesi ile biraz daha basitleşti. Tabi uzun yıllara ortalığı kasıp kavuran Delphi dilinide unutmamak gerekir. C# dilinin çıkışı ile eksi bir Delphi programcısı olarak bu dilin yavaş yavaş yok oluşunu seyretmek hakikatten üzücü.
...
Geliştirilen kodların tam olarak ne yapacağını bilmek bir programcının asli görevidir. Tabi salt piyasa programcısı olmak isteyenler için gerçekten bugün her şeyin temeli olan Nesne Yönelimli Programlanın öğrenilmesi bile gereksizdir. Microsoft firmasının ve üçüncü parti firmaların sunmuş olduğu bileşenler kullanılarak bugün için hemen her türden Windows programı yazılabilir durumdadır. Ancak gerçekten programcı olmak yazara sorulduğunda, gerektiğinde kendi bileşenlerini geliştirebilmek ve yazılan kodun tam manasıyla ne yaptığını bilmektir.
...
 
Kitab'ın basımı bitti. Yakında kitapçılarda bulabilirsiniz.
 
.Net programlamaya yeni başlıyorsanız, yada deneyimli bir C# programcısı olsanız dahi Bellek ve Kaynak Yönetimi, Önişlemci Komutları ve Assembly’ler, Win32 API Erişimi, Emniyetsiz Kod ve İşaretçiler gibi pek değinilmeyen konuların ilginizi çekeceğinizi düşünüyorum.
 
Kütüphanemde "Herbert Schildt" in yanında yerini aldı bile :)
Posted by Selçuk Yavuz | with no comments
Filed under:

DateTimeFormat

Üç yıl önce yazmış olduğum bir uygulama server değişikliği nedeniyle taşınıyordu.
 
Yeni Server'da gerekli kurulumları yapıp veritabanı ve asp.net uygulamamızı taşıdık.
 
Her şey normal çalışırken bir update sırasında "String was not recognized as a valid DateTime" şeklinde bir hata mesajı aldık.
 
Uygulamada dd.MM.yyyy şekilnde bir tarih formatında kullanmıştım. Ancak uygulama yeni Server'da MM.dd.yyyy formatını kabul ediyordu. İlk aklıma gelen Server'ın Regional Settings'ine bakmak oldu. Tarih foratında normaldi.
 
Uygulamam farklı bir format kullanıyor deyip web.config içeriside globalization etiketine culture ekleyim dedim
 
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture = "tr-TR"  />
 
Ancak tarih formatındaki hata devam ediyordu.
 
DateTime.Parsing() e hatalı format gönderenlerin karşılaşacağını tahmin ettiğim için bu hata mesajını Google da hiç aratmadım. Son çare olarak ufak bir araştırmadan sonra şuna ulaştım :
 
Convert.ToDateTime(strTarih,System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat);
 
Sytem.IFormatProvider formatında bir format bilgisi isteyen ikinci parametre mevcut Culture'ın DateTimeFormatını veriyordu. Yani web.config e eklediğim tr-TR nin formatını. Regioanal Settings ve web.config te zaten tarih formatlarımı belirlemişken ve değişken bir Culture yapısına sahip bir uygulama olmamasına rağmen neden tekrar bir tarih formatı istediğini anlayamadım.  
Posted by Selçuk Yavuz | with no comments
Filed under: , ,
More Posts