Ana Sayfa | English Blog | Seminer TV | Dil Cookie Sil  Blog'u Mail ile takip et!       
Daron Yöndem - SQL Server 2005
bir yazılımcının tasarıları...
 Sunday, July 27, 2008

Microsoft'un Windows Server 2008 ile beraber gelen IIS 7.0 içerisinde PHP'nin Linux sunuculardan daha hızlı çalıştığı konusundaki iddiası ve sonrasında Expression Web 2 içerisinde PHP desteği ile artık "PHP ve ASP.NET kardeşliği" diyebileceğimiz yapıya bir destek de SQL 2005 sürücüleri ile geliyor. Aşağıdaki adresten PHP için bir PHP 5 eklentisi olarak gerekli yüklemeleri edinerek PHP içerisinde artık daha rahat bir şekilde SQL 2005 kullanabilirsiniz.

http://www.microsoft.com/downloads/details.aspx?FamilyId=61BF87E0-D031-466B-B09A-6597C21A2E2A&displaylang=en

Biraz daha yükselerek kuş bakışı sunucu taraflı senaryolara bakarsak artık IIS 7.0 üzerinde PHP ve ASP.NET'i aynı site içerisinde beraber çalıştırıp hatta aynı FormsAuthentication yapılarını kullanabilmekle kalmayıp aynı veritabanı sunucusunu da kullanabiliyorsunuz.

Sonumuz hayrola :)

Sunday, July 27, 2008 4:18:33 PM (GTB Standard Time, UTC+02:00)  #    Comments [2]   SQL Server 2005  | 
 Friday, December 07, 2007

Blogumu sürekli takip edenler hatırlayacaklardır, bundan yaklaşık bir ay kadar önce LINQ'den ufak bir yazıyla bahsetmiştim ve daha VS 2008 çıkmadığı için biraz daha sabretmemiz gerektiğini belirtmiştim. Artık elimizde VS 2008 bulunduğuna göre LINQ'yu yavaş yavaş biraz daha incelemekte fayda var. Emin olun çok şaşıracaksınız.

Bu yazım boyunca Visual Web Developer 2008 Express kullanacağım. Yeni bir ASP.NET 3.5 web sitesi yaratarak başlayalım. Örnek boyunca ben kendi makinemde kurulu SQL2005 üzerindeki "forum" adındaki bir veritabanından faydalanacağım. Veritabanımın yapısını aşağıdaki şema içerisinde inceleyebilirsiniz.

Örnek veritabanı tasarımı.
Örnek veritabanı tasarımı.

Bu veritabanı üzerinden yola çıkarak ASP.NET 3.5 sitemde LINQ2SQL kullanarak veriye ulaşmaya çalışacağım. İlk olarak projemize bir "LINQ2SQL Class" dosyası eklememiz gerekiyor. Bunun için hemen "Solution Explorer" içerisinde projeye sağ tuş tıklayarak "New Item" demeniz yeterli.

Yeni bir DBML dosyası yaratıyoruz.
Yeni bir DBML dosyası yaratıyoruz.

Dosyayı projenize eklediğiniz gibi karşınıza farklı bir arayüz gelecektir. Bir sonraki adımda Visual Studio içerisinde "Database Explorer" panelinden SQL sunucunuza ve veritabanınıza bağlanmanız gerekiyor. Aslında işin bu bölümü Visual Studio 2005'den pek farklı değil. Bağlantıyı sağladıktan sonra veritabanınızdaki istediğiniz tabloları sürükle&bırak tekniği ile orta pencereye, yani DBML dosyasına aktarabilirsiniz.

Veritabanından DBML dosyasına yolculuk.
Veritabanından DBML dosyasına yolculuk.

Artık DBML dosyası kaydederek çıkabiliriz. Eğer isterseniz tabloların yanı sıra Store Procedure'lerinizi de DBML dosyalarına ekleme şansınız var. Peki "ekledik de ne oldu?" diyenlerdenseniz buyurun devam edelin.

Projemize ait default.aspx dosyasının Code-Behind sayfasına geçerek kodumuzu yazmaya başlayalım.

Dim datalarim As New DataClassesDataContext

Yukarıdaki satır ile tanımladığımız değişkenimizin bizim DBML dosyamızdaki LINQ nesnelerine ulaşmamızı sağlayacak böylelikle kolayca veritabanından istekte bulunabileceğiniz. Gelin hemen aşağıdaki kodumuz ile bakalım nasıl veri çekeceğiz.

Dim SeciliMesajlar = From Secililer In datalarim.Mesajlars Where Secililer.MesajText.Contains("DARON")

LINQ'yu ilk olarak görenler için yukarıdaki kodun ne kadar garip gözüktüğünün farkındayım :) İlk olarak yarattığımız değişkene bir bakalım. SeciliMesajlar adında bir değişken yaratarak LINQ sorguma eşitliyorum. Aslında yarattığım SeciliMesajlar değişkeninin tipi System.LINQ.IQueryable(of Mesajlar) şeklinde. Yani özetle bana Mesajlar nesnesinin bir listesinden oluşan ve LINQ ile sorgu gönderebileceğim bir yapı döndürülecek. From dedikten sonra tamamen "kafadan sallama" bir tablo adı tanımlıyorum. Bunu SQL sorgularındaki tablolar gibi düşünebilirsiniz. Geçici bir süre için sadece sorgumda kullanılmak üzere bir tablo adı yaratıyorum. Bu tablonun bir önceki satırda yarattığım datalarim veri katmanından Mesajlar tablosundan veri alacağını belirtmek için In deyimini kullanıyorum. Bundan sonrası aslında artık SQL sorguların çok benziyor. Where deyimini kullanarak "kafadan sallama" olarak yarattığım tablonun MesajText kolonunda "DARON" metni geçenlerin geri döndürülmesini sağlamak üzere LINQ sorgumu düzenliyorum.

Bu sorgudan geri dönen SeciliMesajlar değişkenini direk DataSource olarak kullanabilirsiniz. Eğer sayfanıza bir GridView eklerseniz aşağıdaki gibi DataBind yapma şansınız olacaktır.

      GridView1.DataSource = SeciliMesajlar

      GridView1.DataBind()

Gördüğünüz gibi veritabanına erişim bu kadar kolaylaşmış durumda. Aslında eski günlere döndüğümüzde LINQ2SQL'in yaptığı işi yapan harici araçlar kullanarak veritabanlarına göre otomatik şablonlar hazırlayarak şablonlar üzerinden veri katmanı kodları yaratıyorduk. Tabi hiçbiri LINQ'nun getirdiği esnekliğe sahip olmuyordu ama konsept olarak aynı amaca hitap ettiklerini söyleyebiliriz.

Peki arkaplanda neler oluyor?

İş bu kadar kolaylaşmışken hemen akla "Performans???" sorusu geliyor :) Acaba bu sorgular direk SQL'de mi çalışıyor yoksa GridView'ın Paging özelliği gibi :) ASP.NET tüm veriyi SQL'den IIS'e alıp orada mı sorguluyor? Bu soruya cevap bulmak için SQL Management Studio'yu açarak Activity Monitor üzerinden sunucuya gönderilen sorgulardan birini yakaladım.

(@p0 nvarchar(7))

SELECT [t0].[MesajID], [t0].[MesajText], [t0].[MesajDate],

[t0].[LoginID], [t0].[KonuID], [t0].[IsHTML]

FROM [dbo].[Mesajlar] AS [t0]

WHERE [t0].[MesajText] LIKE @p0

Yazdığımız LINQ kodu yukarıdaki SQL koduna çevrilerek SQL sunucusuna gönderilmiş. Gerçekten muhteşem :) Gerekli parametre tanımlanmış doğru sorgu oluşturulmuş ve birleştirilmiş. Bunun üstüne söyleyecek söz yok.

Sanırım artık SQL tarafında sorguları hazırlayıp projelerimi kopyala-yapıştır yapmaktan kurtulacağız :) Tabi daha LINQ ile ilgili anlatacak çok şey var. İleriki yazılarda daha derinlere dalmak ümidiyle.

Hepinize kolay gelsin.

Friday, December 07, 2007 1:05:08 PM (GTB Standard Time, UTC+02:00)  #    Comments [0]   LINQ | SQL Server 2005 | Visual Basic 2008  | 
 Tuesday, October 16, 2007

Yeni hazırladığınız web sitenizi SQL2005 veritabanı üzerine kurguladınız ve lokal olarak kendi makinenizde yarattığınız SQL veritabanına hazırladığınız site ile bazı verilerinizi de girdiniz. Sıra geldi web sitenizi online hale getirmeye, yani hosting sağlayıcınızın sunucularına yüklemeye. Sitenizin dosyalarını FTP üzerinden sunucuya gönderdiniz, son olarak da SQL veritabanınızı hosting sağlayıcınızın verdiği paylaşımlı SQL sunucu üzerindeki veritabanına yüklemeniz gerekiyor. İşte bu noktada sorunlar başlıyor. Eğer bilgisayarınızda Visual Studio 2005 ile beraber gelen SQL Express yüklü ise maalesef SSIS (eski DTS) sisteminizde yüklü olmayacaktır. O nedenle veritabanınızı karşıya atma şansınız yok. Diğer yandan çoğu hosting sağlayıcı kendi yönetim panelleri üzerinden sizin SQL scriptleri yükleyerek işlem yapabileceğiniz ortamlar sağlar. Aslında elinizde tüm veritabanınızı içerisindeki veriler ile birlikte yaratabilecek bir SQL Script bloğu olsu hiç sorun yaşamayacaksınız.

Karşınızda SQL Server Database Publishing Wizard 1.1

Tam olarak yukarıda bahsettiğimiz sorunu giderme amacıyla hazırlanmış olan Database Publishing Wizard ile herhangi bir SQL veritabanından SQL Script'leri yaratabiliyoruz. Bu işlemi yaparken veritabanındaki tüm objeleri yaratacak scriptlerin yanı sıra veritabanındaki veriyi de scriptler şeklinde alabiliyorsunuz. Yazılımı aşağıdaki adresten bilgisayarınıza indirebilirsiniz.

http://www.microsoft.com/downloads/details.aspx?FamilyID=56E5B1C5-BF17-42E0-A410-371A838E570A&displaylang=en

SQL Server Database Publish Wizard ile SQL Script yaratıyoruz.
SQL Server Database Publish Wizard ile SQL Script yaratıyoruz.

Database Publishing Wizard'ı bilgisayarınız Start/Başlat menüsünden çalıştırabileceğiniz gibi isterseniz Visual Studio 2005 içerisinden de kolaylıkla kullanabilirsiniz. Visual Studio 2005 içinde Server Explorer tabında herhangi bir veritabanına sağ tuş ile tıkladığınızda "Publish to provider" komutu ile karşılaşacaksınız, söz konusu komut Database Publishing Wizard'ın açılmasını sağlayacaktır.

Visual Studio 2005 ve Database Publishing Wizard
Visual Studio 2005 ve Database Publishing Wizard

Database Publishing Wizard Visual Studio 2008 ile beraber entegre olarak gelecek. İleriye dönük olarak şu anda desteklenen bir başka Publish metodu daha yer alıyor. Bir web servisi aracılığı ile hosting sağlayıcıya veritabanınızı aktarma şansı tanıyan bu metoddan ben bu yazımda bahsetmedim çünkü bu servisi şu an dünyada bile veren çok az hosting sağlayıcı var. Umarım zamanla bu servis de yaygınlaşır ve onunla ilgili bir yazıyı da bir gün yazmam gerekir :)

Hepinize kolay gelsin...

Tuesday, October 16, 2007 9:48:04 AM (GTB Standard Time, UTC+02:00)  #    Comments [1]   ASP.NET | Visual Studio 2005 | SQL Server 2005  | 
Copyright © 2010 Daron Yöndem. Tüm hakları saklıdır.