LINQ ile Programlama [1]

12.01.2010 Sal

Merhaba,

Uzun zamandır takip ettiğim hatta denemek için küçük çapta bir projeyi de kullanarak tamamladığım, .NET 3.5 ile gelen LINQ (Language Integrated Query) hakkında bir seri yazı yazmaya karar verdim. Bu yazıları okuyarak LINQ ile neler yapabileceğinizi kavramanızı amaçlıyorum.

Her yazıda örnek bir projeye de yer vereceğim, dilediğiniz gibi indirip kullanabilirsiniz.

LINQ Nedir ?

LINQ, Microsoft tarafından geliştirilen, asıl menşei çoğunuzun adını sık sık duymuş olduğunuz ORM (Object Relationship Mapping)’den gelen, .NET Framework 3.0 ve üzeri versiyonlarda kullanabileceğiniz bir veri erişim altyapısıdır. Özelliği ise, bağlandığınız veritabanı içerisinde oluşturduğunuz Stored Prosedür, Query veya fonksiyonları, .NET tabanlı programınız içerisinde oluşturabilmenizdir.

Başka bir deyişle, veritabanı üzerindeki dinamizmi programınızın kodu içerisinde yakalamanıza olanak tanıyan başı başına bir erişim altyapısıdır.

NE YAPACAĞIZ ?

Konuya henüz giriş yaptığımız için ilk yapacağımız basit bir telefon defteri uygulaması oluşturmak olacak. Bir veritabanı oluşturacağız, bunun içerisinde tablolarımızı ve örnek verilerimizi hazırlayacağız. Sonra Visual Studio kullanarak bu verilere erişeceğiz. Bu yazı sadece SELECT işlemini kapsıyor olacak. Diğer yazılarımda sırasıyla diğer CRUD işlemleri ile ileri düzeyde transaction yönetimi gibi konulara değineceğim.

 

1. PHONEBOOK VERİTABANI HAZIRLIĞI

Microsoft SQL Server 2005 açılır, yeni bir database oluşturulur. İsmine "Phonebook" diyeceğiz.

image

 

Şimdi bir tablo hazırlayalım ve aşağıdaki kolonları ekleyelim. Tablomuzun adına da “Telefonlar” diyelim.

Id, Ad, Soyad, EvTelefonu, CepTelefonu. Id sütununda Primary Key ve Identity tanımlamalarını yapmayı unutmayın.

image

 

Tablomuz hazır, sırada birkaç örnek veri girmek var. Tablo üzerinde sağ klik yaparak “Open Table” seçeneğini tıklayın ve girişlerimizi yapmaya başlayalım. Unutmayın, Id sütununa bir giriş yapmayacağız. Satır için gerekli bilgileri girip ENTER dediğimizde SQL bizim için otomatik olarak bir numara verecek.

image

 

2. VISUAL STUDIO 2008 ile PHONEBOOK PROJESİNİN OLUŞTURULMASI

Microsoft Visual Studio 2008 açılır.

File >> New Project denir.

Visual C# Proje Gurubundan “Windows Forms Application” seçilir.

Proje adı olarak “Phonebook” yazılır.

Sağ üst köşede bulunan ve resim üzerinde “.NET Framework 2.0” olarak gözüken değeri “.NET Framework 3.5” yapmayı unutmayın. Aksi taktirde bu proje içerisinde LINQ kullanamazsınız.

image 

 

“OK” butonuna tıklanır ve Visual Studio bizim için projemizi otomatik olarak hazırlar

image

 

3. VERİLERİN LINQ KULLANILARAK GETİRİLMESİ İÇİN VERİTABANI BAĞLANTISI OLUŞTURMASI

LINQ ile kod yazmak için öncelikle hangi veritabanı kaynağına erişmesi gerektiğini söylememiz gerekiyor. Bunu yapmak için “Solution Explorer” içinde proje üzerine sağ klik yaparak “Add New Item” diyoruz.

Karşımıza çıkan diyalog kutusunda “Data” tipinin içerisinde bulunan “LINQ to SQL Classes” nesne tipini seçiyoruz ve “Add” butonuna tıklıyoruz.

image 

Bu işlem gerçekleşir gerçekleşmez Visual Studio karşınıza aşağıdaki gibi bir designer getirmiş olmalı :

image 

Şimdi LINQ nesnemizin özelliklerini set etmeliyiz. En önemli özellik Connection String özelliği. Bunu set etmek için aşağıdaki resimde gördüğünüz “Connection” değerine tıklayarak “New” opsiyonuna tıklamalısınız.

image

Açılan pencerede “Microsoft SQL Server” opsiyonunu seçerek “Continue” butonuna tıklayın.

image

 

Şimdi hangi veritabanı sunucusuna ve bu sunucu üzerindeki hangi veritabanına bağlanacağımız belirlememiz gerekiyor. Bunun için “Server Name” kutusuna bağlanmak istediğiniz SQL sunucusunun adını ve IP adresini yazabilirsiniz. Yazdıktan sonra “Connect to a database” gurubundan bağlanmak istediğiniz veritabanını seçmemiz gerekiyor.

image

Giriş işlemlerinizi tamamladıktan sonra “OK” butonuna tıklıyoruz.

Visual Studio içine geri döndüğümüzde “Server Explorer” sekmesini aktif hale getiriyoruz. Az önce oluşturduğunuz bağlantı kullanılarak SQL sunucu üzerinde çekilen tabloları ve diğer tüm nesneleri görüyor olmalısınız.

image 

Tek yapmanız gereken, “Telefonlar” tablosunu sürükleyerek “DataClasses1.dbml” üzerine bırakmak. Visual Studio erişim için gerekli olan tüm sınıf yapısını otomatik olarak oluşturacak.

image 

Kısa bir bilgi :

LINQ, veritabanı tablolarınızın herbirini bir CLASS olarak nitelendirir. Tüm CRUD (SELECT, UPDATE, DELETE ve INSERT) işlemlerini bu sınıfları kullanarak gerçekleştirirsiniz. İlgili işlemin yapılması için SQL’ sunucuya gönderilmesi gereken sorgu .NET Framework tarafından RunTime sırasında otomatik olarak generate edilir. Böylece suya sabuna dokunmadan tüm işlemlerinizi bu sınıfları kullanarak gerçekleştirebilirsiniz.

Sınıflarınızı oluşturduktan sonra CTRL+S yani Save komutu göndererek “DataClasses1.dbml” dosyasını kaydediyoruz ve kapatıyoruz.

 

4. WINDOWS UYGULAMASI İÇERİSİNE VERİLERİN LINQ İLE GETİRİLMESİ

Projemizi ilk oluşturduğumuzda Visual Studio bizim için Form1 isimli bir form oluşturmuştu. Bu formu açıyoruz ve form üzerine bir buton ile DataGridView ekliyoruz. Nesnelerinize istediğiniz ismi verebilirsiniz.

image

“Verileri Getir” olarak isimlendirdiğim butonun üzerine 2 kez tıklayarak “Click” event’ine erişiyorum :

image

LINQ ile sınıfları kullanarak çalıştığımızdan, bu sınıfların bir DataContext üzerinden doldurulacağı bilgisini vermemiz gerekiyor. Bizim projemizde DataContext dediğimiz, az önce kaydedip kapattığımız DataClasses1 sınıfı. Bundan aşağıdaki şekilde bir instance alıyoruz:

DataClasses1DataContext insContext = new DataClasses1DataContext();

Şimdi sorgumuzu gönderiyoruz :

var telefonlar = from p in insContext.Telefonlars
                          select p;

telefonlar” adı verdiğimiz değişkenimiz, DataClasses1 içerisine getirdiğimiz “Telefonlar” nesnesinin bir kümesini kapsayacak. “from p in insContext.Telefonlars” diyerek, sorgu çalıştığında, “Telefonlar” tablosunun kayıtlarını “p” değişkeni içerisinde tutmasını istediğimizi, “select p” dediğimizde ise tabloya ait tüm sutunların getirilmesini istediğimizi belirtmiş oluyoruz. Dikkat ederseniz, eşitliğin solunda ve sağında 2 ayrı seçim kümesi var. Sol taraftaki küme programatik işlemlerimizde uygulama içerisinden erişeceğimiz değişken, sağ taraftaki “p” kümesi ise, çalıştırılacak SQL sorgusunun sonuçlarının barındırıldığı küme.

Son olarak, “telefonlar” değişkenimizi DataGridView kontrolümüze bağlıyoruz.

dataGridView1.DataSource = telefonlar;

Ve uygulamamızı F5’e basarak başlatıyoruz.

image 

Kod görünümü :

image

Sonraki makalemde SELECT işlemleri içerisinde WHERE kullanmayı işleyeceğim.

Tekrar görüşmek üzere

Biz “Bankamatik”iz !

17.10.2009 Cts

Yurt dışından gelen bir arkadaşım para çekmek için kartını ATM’ye taktı. Şifresini güzel güzel girdikten sonra aşağıdaki “ANA MENÜ” ile karşılaştık 🙂

bankamatik

İş Bankası’na duyurulur !

Tekrar merhaba,

Aklınızda bulunsun :

DataTable.Clone() metodu, sadece datatable’ın şemasını (yani sütunlarını) kopyalar. Satırları içermez. Eğer varolan bir datatable nesnenizi içindeki veri ile kopyalamak istiyorsanız DataTable.Copy() metodunu kullanmalısınız.

Sadece Şema Kopyalamak :

   1:  DataTable insDataTable_Original = new DataTable();
   2:  insDataTable_Original.Columns.Add("Id", typeof(int));
   3:  insDataTable_Original.Columns.Add("Name", typeof(string));
   4:   
   5:  DataTable insDataTable_New = new DataTable();
   6:  insDataTable_New = insDataTable_Original.Clone();

Şema ve Verileri Kopyalamak :

   1:  DataTable insDataTable_Original = new DataTable();
   2:  insDataTable_Original.Columns.Add("Id", typeof(int));
   3:  insDataTable_Original.Columns.Add("Name", typeof(string));
   4:   
   5:  DataRow insDrVeri = insDataTable_Original.NewRow();
   6:  insDrVeri[0] = 1;               //ID
   7:  insDrVeri[1] = "Ozan Günceler"; //NAME
   8:  insDataTable_Original.Rows.Add(insDrVeri);
   9:   
  10:  DataTable insDataTable_New = new DataTable();
  11:  insDataTable_New = insDataTable_Original.Copy();

Kolay gelsin

Tekrar merhaba,

Uzun bir aradan sonra çok sinir bozucu bir problemin çözümü ile karşınızdayım. Bazı Broadcom Bluetooth modüllerinin Office 2007 yazlımları ile uyumsuzluğu sözkonusu. Örneğin ben her defasında Excel’imi kapatırken aşağıdaki şekilde bir hata almaktaydım :

image

Google’da biraz araştırma yaptıktan sonra, Office 2007 ürünlerinin Broadcom Bluetooth servisleri ile ilgili bir çakışması olduğunu öğrendim. Çözümü ise oldukça kolay.

NOT : Aşağıdaki değişiklikler Windows Registry içerisinde modifikasyondan oluşmaktadır. Lütfen aşağıdaki modifikasyonu yapmadan önce Registry backup’ınızı alınız. Aldığınızı varsayarak yazıma devam ediyorum…

  1. Öncelikle START >> RUN >> REGEDIT   yapıyoruz
  2. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Excel\Addins    yoluna ilerliyoruz.
  3. BtOfficeAddin.BtOfficeIntegration.1 segmentinde LoadBehavior Key’ini bularak değerini 0 (sıfır) olarak değiştiriyoruz.
  4. Bilgisayarımızı baştan başlatıyoruz.

image

image

Hepinize kolay gelsin. Tekrar görüşmek üzere !

Merhaba,

Uzun zamandır yazamıyordum, işleri yetiştirelim derken çok ihmal ettim yine. (Sorry)

Hala devam etmekte olan bir entegrasyon projesinde, müşteri için hazırladığımız .NET tabanlı Windows Forms uygulamasından, müşterinin ERP/MRP uygulaması olan JD Edwards içerisine bilgi atmamız/okumamız gerekiyordu.

JD Edwards IBM AS/400 ve DB2 üzerinde çalışan devasa bir ERP/MRP uygulaması. ODBC ile veritabanı kaynaklarına erişebiliyorsunuz. Standart .NET ODBC Provider kullanarak da istediğiniz tabloya erişip sorgularınızı gönderebiliyorsunuz. Ancak karşılaştığımız sorunlardan biri, "iSeries ODBC Provider" olarak adlandırılan DB Driver’ının, DB2 üzerindeki "string" değişkenleri "byte[]" olarak getirmesiydi.

Bunun önüne geçmek için aşağıdaki şekilde bir fonksiyon yazdım, umarım arayan birinin işine yarar 🙂

private static string AS400ByteArrayToString(byte[] InputValue)
{

byte[] byteArray = InputValue;
Decoder dbDecoder = Encoding.GetEncoding(37).GetDecoder();
char[] c = new char[dbDecoder.GetCharCount(byteArray, 0, byteArray.Length)];
dbDecoder.GetChars(byteArray, 0, byteArray.Length, c, 0);
string output = new string(c);
return output;

}

Tekrar görüşmek üzere 🙂

Windows Live Writer

22.04.2009 Çar

Tekrar merhaba,

Blog tutanlar bilir. Pek çok farklı blog engine var şu an ve neredeyse hepsi ücretsiz olarak blog tutmanıza olanak tanıyan alanlar verebiliyor. Kendilerine ait yönetim panellerini kullanarak yazılarınızın girişlerini yapabiliyor, okunma oranlarını takip edebiliyorsunuz.

Blog tutma kararı aldığımda nedense pek bir araştırma yapmadan WordPress’i tercih etmiştim. Belki yönetim paneliydi belki de işlerden çok yoğun olduğumdan kodlamasına zaman ayırmak istemediğim için varolan eklentilerinin fazlalığı nedeniyle böylebirseçim yapmıştım.

Tuttuğunuz blog her marka veya model olursa olsun 🙂 aşağıdaki adresi ziyaret ederek Windows Live Writer uygulamasını indirmenizi ve kullanmanızı şiddetle tavsiye ederim. Bloglarını daha çok “geliştirme çalışmalarında kullanılan notepad” olarak gören blogcuların çok işine yarayacağını düşünüyorum. Bu yazıyı yazmak, formatlamak ve yayınlamak sadece 2 dakikamı aldı. WordPressentegrasyonu ise kusursuz !

http://download.live.com/writer

İşte bu yazının hazırlanması sırasındaki ekran görüntüsü :

image

Uzun bir süredir yazamıyordum. Yeterince “acıkan” okurlarımızı lezzetli içerikle doyurmanın vakti geldi de geçti bile. İşte o makalelerden biri.

Geçenlerde XP Service Pack 3 çalışan bilgisayarlarımdan birine Windows 7 Visual Transformation Pack yükledim. Aslında hiç sevmem bu tarz uygulamaları ama denemek istedim, nasıl oluyor görmeliydim 🙂

Uzun lafın kısası, pek iyi bir sonuç vermedi. Kitlenen, tıklanamayn pencereler, sürükle bırak yaparken BSOD’lar vs… Kurulum sırasında değiştirilen sistem dosyalarını nasıl geri yüklerim diye bir endişi sardı. Kurtulmalıydım ! 🙂

Neyse ki yüklediğim transformation pack’in bir restore özelliği varmış. Tüm sistem dosyaları yüklemeden önceki haline geri döndü. Ancaaak….. Taskbar üzerindeki uygulama buton boyları 50 piksel gibi bir boyuta düştü.  Aşağıdaki gibi :

Tasbar Item Width

 

 

 

 

Bu durumun üstesinden gelmek ve program butonlarınızın boyutunu ayarlamak için aşağıdaki yönergeleri takip edebilirsiniz :

1. Start’a basın, RUN komutunu çalıştırın.
2. Çalışıtırılacak komut alanına “REGEDIT” yazarak Enter tuşuna basın.
3. Açılacak olan pencere Registry penceresi. Sol taraftaki ağaç üzerinde aşağıdaki yolu bulun :
     My Computer >> HKEY_CURRENT_USER >> Control Panel >> Desktop >> WindowMetrics
4. Sol tarafta WindowMetrics seçiliyken, sağ taraftaki listeden MinWidth alanını bulun.
5. Üzerine 2 kez tıklayın ve değer kutusunun içine Piksel cinsinden (sadece sayı) istediğiniz
     genişliği yazın.
6. Bilgisayarınızı baştan başlatın. Birkaç denemeden sonra en uygun boyutu bulacağınıza eminim 🙂

 

Tekrar görüşmek dileğiyle,

Ozan GUNCELER