Ömer Sağlam
Yazılım hastası birinden birkaç not

c# Metotlar - 2

METOTLARIN GERİ DÖNÜŞ DEĞERLERİ
 
Bir metot düşününki, arka planda işlemler yapsın ve size bir sonuç döndürsün...
Bu ve buna benzer bir senaryoda nasıl olurda metotdan bir dönüş değeri alırız sorusuna cevabı bu bölümde veriyor olacağız. Aslında bu konuya biraz değinmiştik ama örnek yapmamıştık. Öncelikle nasıl bir mantık gerektiğini hatırlayalım...
 
 
Biraz önceye gidersek metot tanımlaması yaparken kullandığımız void kelimesinin, metodumuzun geriye bir değer döndürmeyeceği anlamına geldiğini zaten söylemiştik. Madem void geriye birşeyler dönmeyeceğini belirtiyorsa o halde kaldırırsak mutlaka birşeyler olacaktır J Evet ama olur tarafı sadece void kelimesinin kaldırılması ile yeterli olmayacak metot ile ne döneceğini biliyor olduğumuz bir senaryoda ufak bir değişiklik yapmamız gerekecektir.
 
 
Yukarıdaki gibi bir kod bloğu ile ansızın karşılaşabilirsiniz. Helede makelenin sahibi bensem J. Metodun tanımlandığı üst bölüme bakarsak artık void gibi bir kelimenin yer almadığı onun yerine string değer tipinin geldiğini görürüz. Bu ufak değişiklik şu anlama gelir;
Biz bu metot ile bir string bir değer alırız geriyede bir string değer döndürürüz!
 
Çok programatik bir yazım oldu ama metot bunları söylüyor. Daha sonrasına dikkat edersek formun yüklenme anında yazılan metot yani Form1_Load metodunun içerisindeki değişiklikleri incelersek, bir adet string değişken (metin) yaratmışız ve metot sonucunda dönecek değere eşitleme yapmışız (metot string değer döneceği için sorun olmayacaktır.). Peki bu kadar kolaymı bu işler tabiki öyle
 
Peki metodumuz hem parametre alıyor hemde geriye bir değer döndürüyor ama ya birden fazla parametre alarak işlemler yapması ve sonrasında bir değer dönmesi gerekirse ne olacak?
 
 
Yukarıdaki gibi bir senaryoyu metotlara alıştıktan kısa bir süre sonra fazlasıyla kullanmaya başlarsınız. Birden fazla parametre alıyor ve bunun sonucunda metot ile ilgili kodlar çalışıyor ve sonuçta bir değer ( true ya da false) dönüyor.
Metodun kullanılacağı yere göre daha farklı alternatifler tabiki üretilebilir. Peki metot konusu içerisinde aşırı yükleme denilen bir konu daha vardı. Bu konuyu hatırlayan varmı ?
 
METOT AŞIRI YÜKLEME (OVERLOADING)
 
C# güzelliklerinden biri olan aşırı yükleme hallerine hoşgeldiniz. Bu bölümün amacı birden fazla metodu gruplayarak kullanılabilirliği arttırmak ve projenizin daha sade bir halde metotlarınızın sunumunu sağlamak diye düşünebiliriz. Sadelik derken asıl amaç kullanım sırasında anlaşılmakta. Örnek vermek gerekirse kolay. En yakın örnek yine MessageBox
 

Yukarıda ki örneklerde metot kullanımı için parantez açtığımız anda karşımıza sanki sayfa numarası gibi duran bir bölüme rastlarız. Bu bölümün amacı aynı ismi taşıyan birder fazla metodun tek bir yol ile ulaşılabilir olmasını sağlamak. Yukarıda bulunan iki resimde MessageBox.Show() metodu ile ama farklı içerik belirtilmesiyle oluşturulmuş. Bir başka yazım şeklide aşağıda yer almaktadır.



Kendi yazdığımız metodu aşırı yükleme yaparsak eğer;



O kadar yazdık kullanalım değil mi ?

 

Gördüğünüz gibi kullanımı anlaşılır ve çok sade. Eğer MessageBox gibi 21 farklı ihtimalimiz olsaydı ve metot overloading yapamasaydık 21 tane metot yazmak zorunda kalırdık. İlk bakışta eee diye tepki görsede onlarca metot arasında aradığınız metotlara doğru isimleri vermek ve onları aramak gerçekten çok zor olurdu...

Metotlar konumuzun sonuna geldik .
Kalın sağlıcakla.
Mail : omer@omersaglam.com

c# Metotlar - 1

Merhaba arkadaşlar,
Bu makalemizde sizlerle c# ile metot kavramını inceliyor olacağız.
İlk olarak metot ne işe yarar gibi temel bir bilgi ile başlayalım.
Bir program yazarken bir kod bloğunu birden fazla yerde kullanmanız gerekebilir. Bu gibi durumlarda farklı yerlerde aynı kod bloklarını kullanmak ilk bakışta bir çözüm gibi dursada pek mantıklı olmadığını, kod bloğunda birkaç değişiklik yapmanız gerektiğinde anlıyorsunuz  
Varsayalım ki programınızı yazarken aynı kod bloğunu 20 farklı yerde kullandınız ve bir hata yaptığınızı farkettiniz. Bu gibi bir durumda geçmiş olsun diyerek kod bloğunu kullandığınız 20 yerde o değişikliği uygulamak zorunda kaldığınızı hatırlatmam gerekir. Halbuki adı metod olan bir özellik olsa! Aynı kod bloklarını tekrar tekrar yazmak yerine 1 defa yazsak ve kullanmak istediğimizde basit bir şekilde metodumuzu çağırsak ne güzel olur değil mi ?
 

Elbetteki güzel olurdu. Hemde çok güzel olurdu –ki aslında adı metot olan bir özellik zaten mevcut   Bu yolu kullanarak kod bloğunu 1 defa yazıyorsunuz ve sonrasında o kod bloğuna ihtiyacınız olduğu her yerde metodu kullanıyorsunuz.



C# ile kodlama yapıyorsanız aslında metotları ister istemez bir çok yerde görüyor olabiliriz. Örneğin windows uygulaması yazmaya başlayanların en çok kullandığı metodlardan biri MessageBox.Show() ‘dur. Show() dediğimizde bir metot kullanmayız ve bu metot kod bloğu çalıştığında karşımıza bir uyarı penceresi çıkmasını sağlar.

 MessageBox.Show yazarak parantez açtığımızda karşımıza çıkan senaryoyu incelememiz gerekirse;
 


1 numaralı bölüm metodumuzun aynı isimli ama farklı parametre değerleri alarak çalışan metotlara sahip olduğunu gösteri. Bunu ilerlerde zaten anlatacağım.
2 numaralı bölüm metodumuz kullanıldığında bize geri döndüreceği tipi göstermekte.
3 numaralı bölüm ise metodumuzun bizden bektediği tipteki değişkeni belirlemekte.
 
Yukarıda gösterdiğim 3 bölümüde kendi metotlarımızı yazarken detaylı bir şekilde gösteriyor olacağım. Metot kavramını daha iyi anlayabilmek için çoğu ihtimali göz önüne alarak bir kaç örnek metod yazarak devam edelim.
 
KENDİ METOTLARIMIZI YAZMAK
 
Kendi metodunuzu yazabilmek için gerekli malzemeler arasında Visual Studio, azıcık c# bilgisi
 
 Metotlar class denilen yani sınıfları temsil eden yapılar içerisinde barınır. Bu demek oluyor ki biz eğerki bir metot yazmak istiyorsak varolan bir class içerisine yazmak zorundayız.

 
Yukarıdaki senaryoda adı KendiMetodum olan çok basit bir metot örneği yer almakta. Yalnız bu tanımlama sırasında bizlere yabancı bir kaç farklı kod daha görüyoruz ve bunlardan bahsetmem gerekirse;
 
Public : Erişim denetleyici denilen, yazılan metodun nasıl davranması gerektiğini belirleyeceğiniz özelliklerden biri olan public, bu metodun her yerden ulaşılabilir olduğunu temsil eder!
 
Void : Void, bir metodun işlemler yapıldıktan sonra geriye bir değer döndürmeyeceğiniz gösterir. Hatırlarsanız MessageBox.Show metodunu kullandığımızda bizlere DialogResult türünden bir değer döndürebiliyordu!
 
En basit şekilde Metot yazılımı gördükte bunu ne yapacağız nasıl kullanacağız derseniz;
 
 
Yukarıda yazdığımız metodu formumuz açılırken çağırıyoruz ve içerisinde yazan kodların çalışmasını sağlıyoruz. Formu çalıştırdığımızda bir adet MessageBox ile karşılaşırız.
 
Peki metodumuz her zaman bir işlemi yapmak ve geriye birşey beklememek olurmu ? Olmaz tabiki
 
METOTLARA DEĞİŞKENLER GÖNDERME
 
Bir metodun sadece kullan ve arka planda işlemleri yaparak devam et mantığı yetmeyebiliyor. Bir metodun işlem yapabilmesi için bizden birkaç değişken beklediği ve o değişkene göre işlem yapabildiği senaryolarda kurgulayabilmemiz mümkün.
 
Örneğin az önceki örneğimizde MessageBox çalıştığında bizim belirlediğimiz yazı yazsa metodumuz daha kullanışlı olurmu? Bence olur
 
 
Yukarıdaki senaryoda metodumuzun bizden bir adet değişken beklemesini sağlayabilmek için KendiMetodum yazdıktan sonra parantez içine “string gelenParametre” yazdık. Bu şu anlama gelir;
Metodumuz bizden bir adet string türünden bir değişken bekleyecek. Peki bunun varlığını nasıl ispatlarız?
 
 
Metodu çağırdığımız yerde parantez açtığımız anda bizden bir adet string türünden değişken beklediğini ve metodu kullanabilmek için ne yazıkki istediğini vermemiz gerektiğini söyler .
 
Sonuç olarak eğerki istediğini verirsek (2 önceki resimdeki gibi) metodu çağırırken içerisine yazdığımız her metin MessageBox ile gösterilecek ve bu olay kullanım esnekleğini arttıracaktır. KendiMetodum metodu tanımlanırken dikkat ederseniz MessageBox.Show dedikten sonra içerisine gelenParametre değişkenini gösterir. Burdan anlaşılacağı üzere gelenParametre metot kullanılmak istendiğinde girilecek olan değişkenin MessageBox a taşınması ile yükümlü olacak. Siz metodu ne şekilde kullanmak isterseniz yani metin olarak ne yazarsanız, metot içerisindeki gelenParametre değişkenide o metni temsil ediyor olacak!

E bu güzel birşey değilmi  Evet aynen öyle. Aklınızda onlarca farklı senaryonun canlandığını hisseder gibiyim...

Karting Etkinliğimiz 16 Temmuz a Ertelendi


Merhaba arkadaşlar.

Bugün düzenlemeyi planladığımız karting etkinliğimiz olumsuz hava koşullarından dolayı haftaya kalmıştır. Yeni etkinlik bilgileri;

Etkinlik Yeri : Zincirlikuyu Karting Park
Etkinlik Tarihi : 16.07.2010 – Cuma
Etkinlik Saati : 19:00 – 20:00 arası
Katılım Durumu : Herkese açık
Link : http://www.zincirlikuyukartingpark.com/

Önümüzde ki haftaya kadar, lastik yakma hayaliyle beklemeye devam edeceğiz ..
Bu zaman içinde kendinize çok iyi bakın...

9 Temmuz Cuma - Etkinlik duyusu

Merhaba arkadaşlar.

Uzun bir süredir düzenlemek istediğimiz karting etkinliğimiz için mekan arayışı içerisindeydik.
Ziyaret ettiğimiz bir çok yerden edindiğimiz ilk izlenim, biraz pahalı olmasıydı. Daha sonradan farklı kriterler
belirleyerek yaptığımız değerlendirme sonucunda en güzel yeri belirledik.

Merkezi olması, açık hava olması, geniş yollar, araç durumları ve etkinliğe daha uygun olmasından dolayı etkinlik yeri Zincirlikuyu karting park
olmuştur.

Etkinlikle İlgili Bilgiler
Etkinlik Yeri : Zincirlikuyu Karting Park
Etkinlik Tarihi : 09.07.2010 – Cuma
Etkinlik Saati : 19:00 – 20:00 arası
Katılım Durumu : Herkese açık
Link : http://www.zincirlikuyukartingpark.com/

Metro City, Kanyon, Akmerkez, Cevahir, Profilo, Astoria, İstinye Park gibi alısveris merkezlerine çok yakın;
Zincirlikuyu gibi oldukça merkezi bir yerdedir. Ulaşım imkanları çok rahattır, Gayrettepe’de indikten sonra yürüyerek 5 dk sürmektedir.
1. Leventten de gelişi 10 dk sürmektedir.

Karting Haricinde
Langırt
,
buz hokeyi,
satranç,
dama,
tavla,
vs.

Karting Fiyatları
6 dk : 15 TL
10 dk : 20 TL
12 dk : 25 TL

Not: Bu fiyatlar temel fiyatlardır ve biraz pazarlık ile süre artırımına gidebiliriz diye tahmin ediyorum
J

Bu açıklamalar bir yana açıkçası verilecek her kuruşa değecek güzellikte bir heyecan bizleri bekliyor.
Biz gençler olarak 9 Hp gücündeki araçlar ile yaklaşık 40 km sürat ile virajı dönmeye çalışmak ve

bunu daracık bir yolda yer ile 3 cm mesafede yapmak gerçekten heyecan verici. F1 ve rally pilotlarının bir çoğunun karting ile

başladıklarını da söylemeden duramayacağım.
Uyarı : Hız korkusu olanlar araçlardan uzak durabilir
J

Etkinliğe gelecek herkese iyi eğlenceler diliyorum
Hadi biraz lastik yakalım ;)

MsSql de Select Into Kullanımı

Merhaba arkadaşlar.

Kısa bir aradan sonra yine bir makale ile karşınızdayım. Yeniden yoğun bir proje gelene kadar yazabildiğim kadar makale yazmak istiyorum Bugünde sizlere sql into nedir ne işe yarar sorularının cevaplarına ulaşmanızda yardımcı olmaya çalışacağım. İlk olarak into anahtar kelimesi ve taşıdığı anlamlar üzerine biraz açıklama getireyim.

Into anahtar kelimesi sql in vazgeçilmezlerinden biri. Aslında hepimiz yakından tanıyoruz kendisini. Her kayıt eklemek istediğimizde "insert into ..." ile başlayan sorgularımız da tanıdık onu. Çok klasik bir başlangıç oldu biliyorum ama nedense böyle bir başlangıç daha duygusal olur diye düşündüm

Insert işlemlerinde kullandığımız into kelimesi türkçe anlamıyla birşeylerin içine veriler göndereceğinin habercisidir. Select into ise kayıt eklemek için değil aynı veritabanında tablonun yedeğini almak için kullanılıyor! Amaç şu: Elinizde yoğun çabalarla oluşturduğunuz içinde 1000 kadar kayıt olan bir tablo var. Bu kayıtları backup alıp saklasınızda anlık işlemlerin önemi kurumsal projelerde daha bir önemlidir. Yani back up ya da import export tarzı işlemler burada ne yazık ki biraz zaman kaybettirir. Yapmanız gereken hangi tabloda çalışacaksanız onun yedeğini alıp hızlı bir şekilde düzenlemeleri yapmak eğer sorun olursa da yedeği kullanıp eski haline geri döndürmek. Mantık bu peki bu işlemi nasıl yapacağız derseniz de;

İlk olarak testDb adında bir veritabanımız olduğunu düşünelim. İçinede deneme amaçlı Names adlı bir tablo oluşturdum. Tablom da çalışmalar yapacağım ve öncesinde orjinal datayı kaybetmemek için yedek almayı düşündüm. Bu tür bir karar verdiyseniz ilk olarak yapmanız gereken MSSQL'de bir adet NEW QUERY yani sorgu penceresi açmak. İçerisine hangi tablonun yedeğini almak istiyorsak şu şekilde bir ifade ile kullanabiliriz.

"select * into TABLEBackUp from TABLE"

Burada yapmak istediğimiz şu: TABLE adında ki tablomuzu TABLEBackUp adında bir tablo oluşturarak yedeğini almak. Kullanım gördüğünüz gibi çok kolay. Kendi veritabanımızda bu işlemi yapmak istersek şu şekilde bir işlem yapabiliriz.

"select * into NamesBackUp from Names"

Bu işlemi yaptıktan sonra dizinimde "NamesBackUp" adında yeni bir tablo oluştuğunu görürüm. Names tablosunda ki tüm özellik ve kayıtları içeren bir tablo, ne güzel :)

 

Ama dikkat ettiyseniz select sorgumda * ifadesi yine karşıma çıktı. Eğer * ifadesi varsa ne demek oluyordu. ( Cvp:Tüm sütunlar :) ) Evet doğru bildiniz. Tüm sütunların varolacağını temsil ediyordu peki biz belli sütunları bu işlem ile yedekleyemezmiyiz?

Sorgumuzu biraz değiştirip * yenine sadece Id sütunun yedeklenmesini istiyorum...

"select Id into NamesBackUp2 from Names"

Sorgumu çalıştırdığım da sorun çıkarmadan yeni tabloyu oluşturduğunu söylüyor. Ne güzel, ne güzel :)

İncelersek iki backup arasında sütun farkının olduğunu anlarız.

Evet arkadaşlar bu günlükte benden bu kadar. Yeni bir makalemde tekrar görüşmek dileğiyle sağlıcakla kalın.

Görüş ve öneriler için : omer@omersaglam.com 

Sql Database Publishing Wizard

Merhaba arkadaşlar.

Uzun ve yorucu bir maratonun içerisinde olmamdan dolayı bu aralar pekte teknik içerik paylaşamıyorum farkındayım ama hafifleyen işlerimi fırsat bilerek bir makale yazmak istedim.

Mssql veritabanlarını kullanmaya ilk başladığımız yıllarda Mahmut TEMUR ile birlikte üzerine çokça durduğumuz bir konuydu bu. Sorardık cevap alamazdık ama umutluyduk bulacaktık :)

Nitekim bu tür bir anıyı paylaştığım sevgili dostum Mahmut TEMUR' a göz kırparak konu ile ilgili bilgilerimi sizlerle paylaşmaya çalışacağım. Sql ci arkadaşlar .bak ile işlerini hallederken server yönetimimiz olmadığı için ara sıra zorlanabiliyorduk. Peki biz ne yapardık? Tabiki import - export data özelliğini kullanırdık. Veriler taşınırdı sorun olmazdı ama primarykey ve default değerler olmazdı :s Sonra tekrardan uğraş uğraş uğraş...

Neyse zaman ilerledi ve farklı çözümler üretmeye başladık. Çözümlerde yetersiz kalmaya başlamıştı ki Visual Studio yardımımıza yetişti. Visual Studio 2005 te ufak bir eklenti ile gelen Visual Studio 2008 ile tam destek alan bir publish hikayesidir bu makalemde anlatacağım.

 

Şimdi gelelim bu işlemi sadece bir kaç sn de nasıl çözeceğimize. İlk olarak visual studio da bulunan server explorer sekmemizi kullanılır bir hale getirmemiz gerek :) İlk olarak server explorer penceremizde bulunan add connection butonuna tıklıyoruz. Önümüze bir pencere açılır ve bizde veritabanı ile ilgili bilgileri girmemizi ister...

 

TestDb isimli veritabanımızı resimde görüldüğü gibi bilgileri ile test ediyorum ve test başarılı diye bir uyarı veriyor. Veritabanım hazır gibi artık amaca doğru ilerleyebiliriz :) Visual Studio da bulunan Server exlorer penceresinin içine gelen veritabanımızı artık bu bölümdende kontrol edebiliriz...

İşte can alıcı nokta. Publish to Provider özelliğini kullanarak veritabanımızın sorgu halini çıkartıyoruz. Özellik ilk açıldığında karşılama sayfası gelir bu sayfa hiç önemli değil zaten sonrasında ise hangi veritabanını script halinde almak istediğinizi sorar. İlgili veritabanını seçim devam edebilirsiniz. Sonrasındaki bölümse sql dosyasının nereye kaydolacağını belirlemenizi ister buraya hiç dokunmazsanız %99.9 belgelerim içine atacaktır :) Bu bölümüde geçtiğimizde karşımıza ayar bölümü gelecektir. Sql 2005 kullanan arkadaşlarımızın sql dosyasını 2008 formatında çıkartıp bu işlem bir işe yaramıyor demelerini istemiyorsak veritabanı versiyonunu belirtelim. Bu bölümüde hallettiğimize göre finish diyeler çıktımızı inceleyebiliriz.

 

Sql uzantılı dosyamız içerisinde ekleme ve silme kodlarının yer aldığı bir dosya ve yapmamız gereken tek şey sql programımızda ilgili veritabanıyla ilişkili bir query oluşturmak ve elimizde bulunan .sql dosyamızı bu pencereye sürüklemek. Execute Script olayını unutmayın :)

İşte bu kadar! Zahmetsizce kolay ve hızlı bir şekilde verilerinizi yeni veritabanınıza taşıdınız.

Çok çok geçmiş olsun dilerim :)

Kendinize iyi bakın.

 

OleDb nesnelerini kullanma - 2 Excel(Okuma)

Kurumsal bir firmada çalışıyorsanız işinizin büyük bir kısmı excel üzerinde çalışmak oluyor (En azından bizde böyle ) Excel ile çalışmak kurumsal firmaların işine geliyor ve ister istemez bu durum yazılımcının excel üzerinde ki hakimiyetini arttırmasında biraz zorunluluk getiriyor. Excel deki düzenli veri tutulması macro atamaları ya da ona benzer fonksiyonel işlemleri bünyesinde barındıran excel in c# ile etkileşimide bir hayli kolay[!]

Hatırlarsanız birkaç yazı öncesinde OleDb nesnelerine bir giriş yapmıştık. Anlaşılır ve basit bir şekilde OleDb nesneleri ile Access veritabanına bağlanıp verileri getirmiştik. Önceki makalemde yazdığım gibi OleDb nesneleri ile farklı veri tabanlarına bağlanmak mümkün. Özellikle bağlantıda tercih edeceğimiz veri kaynağı ise excel olacak demiştik. Şu an söylediklerimde değişme olmadığını belirterek excel ile işlemler yaparkende OleDb nesnelerinden yararlanacağımızı söyleyebilirim. Excel ile işlemler yaparken dikkat etmemiz gereken önemli bir konu da excel e giden sorguların biraz farklı oluşu!

Fazla uzatmadan excelde işimize yarayacak bölümleri biraz tanıtayım  Aşağıda yer alan excel resmimizde bir kaç bölüm göreceğiz. Bu bölümleri mümkün olduğu kadar Access tarzı veritabanlarına benzetmeye çalışacağım. Her ne kadar ilk bakışta pek benzemiyor olsada ilerleyen zamanlarda eminim ki sizde hak vereceksiniz.

Örneğin Columnes denilen bölümü veritabanlarımızda oluşturduğumuz kolonlara benzetiyorum hep. Excel için üstte yer alan tanım niteliği taşıyacak ve biz bu bölümü sanki veritabanı tasarlarken hazırladığımız kolon adlarıymış gibi düşüneceğiz. Diğer bölüm Records yani kayıtlar. Bu bölümde en üstte yer alan 1 satırın altında düzenli şekilde yazılmış olan veriler olacak. Sanki bir tabloya veri eklermiş gibi yeni bir kayıt geldiğindede mevcut yazılmış son kaydın altına gelecek. Diğer bir bölüm ise Worksheets. Ben bu bölüme sayfa demek yerine tablo diyorum. Sanki bir veritabanında tablo yapar gibi excel de sayfa oluşturup, tablolar yerine sayfalara bağlanırsınız.!


Önizleme : resim 1

Tabi bu kadar bilgi yeterli değil. Örneğin Access te olduğu gibi veri kaynağımızın nerde olduğu bizi çok ilgilendiriyor. Yanı sıra Access te kullandığımız Microsoft.Jet.OleDb.4.0 sağlayıcısını değiştirmeden kullanmak gerekiyor. Neyse bu kadar ön bilgi şimdilik yeter. İlk olarak Excel den veri çekerek başlayalım. Proje için Windows Application seçimim devam etmekte. Web tabanlı çalışacaksanız değişen pek bir şey olmuyor merak etmeyin . Şimdi şöyle bir senaryomuz olsun. Bir adet listbox kontrolü, altında da verileri çekmek için bir adet buton koyuyorum. Butonumun click olayında gerekli excel ile bağlantıyı sağlayarak gelen verileri listbox içerisine yazdıracağım. Form tasarımım aşağıda yeralmaktadır. Pek uğraşmak istemedim siz dilediğiniz gibi tasarlayın

 
Önizleme: resim 2

 Formun design kısmı tamam şimdi ise butona basıldığında verilerin çekilmesini sağlayalım. Click event ının olduğu bölüme aşağıdaki kodları yazalım
Not: Excel dosyamızı yukarıda ki resim 1 de gözüktüğü gibi, xls (excel 2003) formatında ayarlayarak C:/ dizini altında oluşturduğumuz Excel adında ki klasör içine kaydettik.

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/Excel/excel1.xls;Extended Properties=""Excel 8.0;HDR=YES;""");
OleDbCommand command = new OleDbCommand("select ID,City,Region from [Sayfa1$] where ID<>0", con);
con.Open();
OleDbDataReader dr = command.ExecuteReader();
while (dr.Read())
{
lstContent.Items.Add(string.Format("{0} - {1}", dr["ID"].ToString(), dr["City"].ToString()));
}
con.Close();

Klasik bir bağlantı kur, komut ver ve sonuçları alarak işlem yap mantığını kullandık.Dikkat ederseniz Connection kısmında Extended Properties diye bir kısım var. Bu kısım ile excel bağlantısı olduğu ve versiyonunu belirttik. WorkSheet yani tablo bölümünde ise [Sayfa1$] olarak kullandık. Gördüğünüz gibi kullanım sanki Access bağlantısı yapar gibi gerçekleşti,Programı çalıştırıp butona tıklarsak aşağıda ki gibi bir liste alırız.



Excel ile veri görüntüleme işi tamamdır. Devamında ki derslerde kaydet güncelle ve sil olayına değineceğiz

Sağlıcakla kalın;
Görüş öneri : omer@omersaglam.com


 

 

Bir dönemin daha sonuna geldik

Yaklaşık 3 aylık bir maraton ardından yazılım derslerimi tamamlayarak kur'umu bitirdim. Hafta sonları işimin haricinde asp.net ve ado.net ağırlıklı derslerimizde, acısıyla tatlısıyla bir çok anımız oldu. Sınıfımız ile ilgili son satırları yazarken buruk bir sevinç vardı içimde ama biliyordum ki gerçekten kur sürecinde yapmayı hedeflediğim bir çok şeyi yerine getirmiştim. ( Cookie sorunu hariç  ) Kursumun bitmesine en çok sevindiğim nokta cumartesi ve pazar günleri uyumaya devam edecek olmam  uzun bir süredir 11-12 lere kadar uyuyamıyorum ama intikamım acı olecek  Nasıl bir şey yaparım bilmiyorum 48 saat mi uyurum 1 hafta kalkamam mı bilinmez. Neyse çok uzatmayarak resimlerle devam edelim...

Bir daha karşılaşırmıyız bilmem ama mimtek yazılım 1 in her zaman benim için farklı bir yeri olacağı kesin. Emeğinize elinize sağlık...

Can ve Engin. Sınıfın en geveze ikilisi  Hadi Can önümde oturuyordu da Engin birde en arka sırada oturması her zaman "sus artık Engin" diyemeyecek kadar keyilfi olmamız sebep oldu izinlere. Allah çevresindekilere sabır versin

Muhteşem ikili ortasında da Erhan var birde. Yalnız Enginle kanka olmaya devam ederse hali duman  (Şaka şaka )

Üsküdardan süper bir kesit

Karlı bir havada vapur da olmak. En zoruda azgın dalgalarda endişe içinde yol almaktı...

Şimdiki kuşlarda çok şanslı.

Uzun uzun yazmak isterdim ama çok acıklı olmasın diye kısa kesiyorum. Mimtek sınıfıma sağlık ve başarılar diliyerek bloğuma son noktayı koyuyorum.

OleDb nesnelerini kullanma - 1 Access

Merhaba Arkadaşlar.

Konumuz dahilinde sizlere oledb nesneleri hakkında bilgi vermeye çalışacağım ama öncesinde bir anımı sizinle paylaşmak istiyorum.

Yazılıma ilk başladığım yıllarda aynı heves ve hırsla kod yazmaya çalışıyordum ama çevremde ki arkadaşlarımın bana yardım etmek yerine işimi zorlaştırmaya çalıştıklarını farkettiğimde bir hayli zaman kaybetmiştim. Eğer kod yazmaya ihtiyaç varsa muhtemelen dinamik yapı kullanmanız gerekmekte ve hali hazırda bir kaç verinizde bulunmaktadır. Bu tür bir yapıda tabi ki interaktif bir dil ve onla birlikte kullanmanız gereken birde veritabanınızın olması gerekecektir. Bende bunu biliyordum ama bunu nasıl yapacağımı bilmiyordum. Sonucunda nemi oldu??

Traji komik şekilde geçen 3 gün sonunda veritabanına bağlanıp verileri çekmeyi başarmıştım  O benim en büyük zaferimdi. O zamanlar tabi access haricinde veritabanı bilmiyordum. Şimdiki gibi pek kaynakta yoktu açıkcası   Yazılım hayatımın en gergin 3 günü o zamanmış meğersem. Sonradan işi öğrenince hiç bir sorunla 3 gün uğraşmadım  Bu işin püf noktalarını öğrenmekle ilgili ve konumuz dışında. Neyse fazla dağıtmadan kenardan devam edeyim. :)

İlerleyen zamanlarda access için yetersiz kelimeleri duymaya başlamıştım. Ne yapsam ki diye düşünmeye başladıktan kısa bir süre sonra mysql veri tabanı ile tanıştım. Çok fonksiyonel ve performanslı bir veritabanı gibi gelirken onun hakkındaki düşüncelerim de mssql ile tanışmamdan sonra ortadan kayboldu.

Zaman ilerledikçe veritabanları değişiyor ama kodlarda değişmese ne iyi olur diyesim geliyor. İşte bu makalemde sizlere bu türden bir güzellikten bahsediyor olacağım. Ole db nesneleri veri sağlayıcılarının adlarını değiştirerek bir çok veri kaynağına bağlanabileceğiniz bir sınıf aslında. Bunların başında access ve excel bağlantıları geliyor. Ole db nesneleri için en çok excel bağlantılarında yararlandığımı da belirtmek istiyorum. Kurumsal firmalar genelde excel ile verileri düzenli şekilde yedekledikleri için excel ile bağlantı kurabilmek ve üzerinde işlemler yapabilmek bazen hayati bir önemi olabiliyor. ( Bkz. Fatal Error :] )

Veri bağlantısı kurmak cümle kurmaktan daha kolay gerçekten. Örn bir adet access veritabanımız olsun ve access teki ilgili tablodan kayıtlarımızı sayfamıza yazdıralım. Bunun için sayfamda bir adet repeater kontrolü kullanacağım. Repeater demişken biraz bahsetsek iyi olur. Repeater kontrolü verilerinizi belli standartlarda kullanıcıya sunmanıza yarayan data kontrollerinin en ilkel, en hızlı ve en sade yoludur :) İçerisinde sadece itemTemplate kullarak istediğiniz şekilde listelemeler yapabilmenize imkan sağlar. İşe ilk olarak  bir access dosyası yaratarak başlayalım. Bilgiler aşağıdaki gibi olsun

Veritabanımızı "veritabani1.mdb" şeklinde kaydettik. İçine bir kaç veri eklemeyi unutmayın yoksa benim gibi boş veritabanından neden veriler gelmiyor diye kafayı yiyebilirsiniz  Benden söylemesi :) veritabanımız hazır olduğuna göre artık arayüzümüze bakabiliriz. İlk olarak design kısmına bir göz atalım.

 

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate
>
        <%#Eval("Isim") %> - <%#Eval("Soyisim") %> <br
/>
    </ItemTemplate
>
</asp:Repeater>
 

Bu bölümdeki itemTemplate bize düzenlenebilir serbest bir alan sağlamakta. Eval metodu ile birlikte veritabanımızda bulunan sütun adına uyuşan bilginin sayfaya çağırılmasını sağladık. Yani isim soyisim yazacak sonrada bir alt satıra geçecektir. Sıra geldi kodlarımı yazmaya. Gerekli işlem için cs kısmına geçtik. Bu bölümde OleDb nesnemizi kullanarak verileri repeater kontrolüne aktaracağız. Konunun daha iyi anlaşılması için hemen açıklama getireyim.

Bir arkadaşınızın olduğunu düşünün. Adı da Can (MimtekYazılım 1)  olsun. Ben Can a bir komut vereceksem ilk olarak onun beni farketmesini sağlarım. Örn Can bakarmısın dediğimi farzedin. Bu durumun yazılım bakımından karşılığı veritabanı ile bir bağlantı kurmaktır. Peki sonrasında ne yapmam gerekir? Tabiki Can a bir komut göndermeliyim ki ne istediğimi bilsin. Sonrasında da Can dan isteklerimi yerine getirip bana geri cevap dönmesini beklerim. Bu senaryo da aslında yazılım da veritabanları ile çalışmakta kullanılan mantıktan pek farksız olduğunu birazdan anlayacaksınız...

OleDb nesneleri ile çalışmak istiyorsanız ilk olarak sayfanıza using System.Data.OleDb; namespace ini eklemenizi öneririm :) Sonrasında aşağıda ki kodları yazabilirsiniz.

OleDbConnection baglaniyorum = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; data source=" + Server.MapPath("veritabani1.mdb"));
OleDbCommand komutSatirim = new OleDbCommand("select * from isimler", baglaniyorum);
baglaniyorum.Open();
OleDbDataReader okuyucu = komutSatirim.ExecuteReader();
Repeater1.DataSource = okuyucu;
Repeater1.DataBind();
okuyucu.Close();
baglaniyorum.Close();

Burdaki olayı kısaca özetleyerek devam edelim. Access veritabanımıza bağlanabilmek için OleDbConnection nesnemizi kullandık bu az önce bahsettiğim senaryoda ki Can a seslenme olayı gibi düşünebiliriz. Daha sonra OleDbCommand nesnemizi kullandık. Bunuda Can a bir istekte bulunma gibi düşünebilir. Can' ın isteğimiz sonucunda bize döndürdüğü değerleri OleDbDataReader ile aldık ve Design bölümünde sayfamıza attığımız repeater (Repeater1) kontrolümüze taşıdık.  

 

Oledb nesne kontrolü ile ilgili ilk makalemin sonuna geldik. Diğer makalemde tekrar görüşmek dileğiyle sağlıcakla kalın...

Görüş ve öneriler için :
omer@omersaglam.com

Asp.net ile xml işlemleri ( Xml den veri alma )

Merhaba dostlarım. Bugün size ucuz yoldan profesyonel olarak veri saklayabileceğiniz bir yerden yani xml veri depolama alanlarından bahsedeceğim. Xml alanları Mssql ya da mysql gibi ücretli veri saklama alanlarına sahip olmayanlar için biçilmiş kaftan diyebiliriz :) Çok basit bir yapısı devasa bir geçmişi ve çok şık bir yazılımı bize sağlayan xml lerde dezavantajlar: verilerin herkesçe ulaşılabilir olması ve az verilerde bile yavaşlamaya sebep olabilmesi. Xml ler ile ilgili fazla detaya girmeden bir xml dosyası açıp adını xmlim.xml olarak kaydedelim... 


xmlim.xml --------------------------

<?xml version="1.0" encoding="utf-8" ?>
<ilkTag>
  <altTag>
  <Id>1</Id>
  <Ad>Ömerce</Ad>
  <yas>22</yas>
  <uzmanlik>c#.net</uzmanlik>
  </altTag>
  <altTag>
  <Id>2</Id>
  <Ad>Ömerce 2</Ad>
  <yas>22</yas>
  <uzmanlik>c#.net</uzmanlik>
  </altTag>
</ilkTag>
 

 Xml dosyamızı kaydettikten sonra projemizden default.aspx.cs dosyamıza aşağıdaki kodları ekleyelim.

default.aspx.cs --------------------- 

  //Xml ile ilgili işlemlerimizi XmlDocument class ımız ile yaparız
  XmlDocument document = new XmlDocument();
  //Xml imizi ram de tutmak için yüklüyoruz...
  document.Load(Server.MapPath("xmlim.xml"));
  //Xml dosyamızdan alınan verilerin içeriği xmlnodelist class ında tutuluyor.
  //SelectNodes ile liste alırken altTag node sinin alttındaki node leri okumasını söylüyoruz,
  //Yani SelectNodes("/ilkTag") olarak yazılsaydı gelen liste altTag olacaktı...
  //SelectNodes("/ilkTag/altTag") yazdığımız için gelen liste xml imizdeki Id,Ad,yas,uzmanlik node ları oldu.
  XmlNodeList liste = document.SelectNodes("/ilkTag/altTag");
  //Foreach döngüsü ile listemizdeki node ları ayırıp ihtiyacımız olanı kullanabilmemiz için hazırlıyoruz...
  foreach (XmlNode dugum in liste)
  {
  //dugum.ChildNodes[1].InnerText ile 2. node olan Ad isimli Node u aldık.
  string ad = dugum.ChildNodes[1].InnerText;
  //Sayfaya bastık...
  Response.Write(ad+"<br>");
  }
 

 İşte bu kadar xmlden verileri okumuş olduk :)

Ömerce den sevgilerle...

İletişim