27 Ağustos 2011 Cumartesi

LINQ SQL




Language Integrated Query (Dil’e Entegre Edilmiş Sorgulama), kısaca LINQ, .NET Framework 3.5 sürümüyle birlikte tanımlı gelen bir özelliktir. .NET Framework 3.5 sürümünden önce .NET Framework 2.0′ da eklenti paketleriyle birlikte kullanılabiliyordu.
Bu teknoloji sayesinde veritabanı ile kullanılan programlama dili arasında kodsal bir bütünlük sağlanmıştır, böylece veritabanının programlama dili kullanılarak sorgulanabilmesi sağlanmış, veritabanı kodlarla yönetilebilir hale gelmiştir. LINQ teknolojisi kullanılmadığı durumda veri katmanı ve uygulama katmanı birbirinden bağımsız durumdadır, uygulama katmanında veritabanından bir veri elde edebilmek için veri katmanıyla iletişim için “connection string”(bağlantı katarları)’ ler kullanılır ve bu şekilde bu iki farklı yapı arasında bir köprü oluşturulur. Sonunda elde edilen veriler programlama dilinde alışılmış olunan nesneler şeklinde değildir, doğru verileri elde edebilmek için bu sonuçları programa uygun hale getirmek gerekir, bu da fazladan birtakım işlemler yapmak anlamına gelmektedir.
LINQ teknolojisiyle birlikte veriler nesneler haline dönüşmüştür. Linq teknolojisinde sorgu uygulama katmanında yazıldığında ilk olarak numaralandırılır, yazım hataları varsa onlar sorgulanır. Buradan anlaşılacağı üzere sorgu ifadesi oluşturulduğu an çalışmıyordur, numaralandırılan sorgu ifadesi linq to sql yapısı aracılığıyla çalıştırılır. Çalıştırılan bu sorguyla birlikte sql sunucusundan veriler satırlar halinde aktarılır. Linq to Sql yapısı bu satırları nesneler haline getirir. Bu şekilde veriler nesneler halinde aktarılmış olur. Linq to sql yapısında verilerin nesneler haline gelmesini sağlayan temel yapı dbml (database markup language) sınıfıdır. dbml sınıfıyla projeye bağlanan veritabanında linq teknolojisi kullanılarak sorgulama yapılabilir. dbml ile DataContext (Veri Bağlama) sınıfı oluşturulur, bu kısım “Framework” e girişi sağlar, giriş yapıldıktan sonra “intellisense”, kod tamamlama gibi platformun özelliklerinden faydalanılabilir.  Veritabanı tarafında yer alan tablo, saklı yordam (stored procedure), görünüm (view), fonksiyon gibi unsurlar proje çerçevesinde nesne olarak yer alabilir, bu da linq kurallarının sql üzerinde gerçeklenmesini sağlar. Burada oluşturulan bu nesneler veritabanından çekilen sonuçları üzerlerinde saklayabilirler, alt yapıda constructor (yapıcı)’ larla bu nesneler oluşturulmuştur.
Uygulama:
  1. Linq teknolojisini kullanabilmek için Solution Explorer (Çözüm Gezgini)’ dan proje üzerine sağ tıklanır ve Add (Ekle)-> New Item (Yeni Nesne) seçilir.
  2. Gelen pencerede LINQ to SQL Classes üzerine tıklanır ve veritabanına uygun olarak bir isim verilir.
  3. Daha sonra açılan pencere üzerinden Server Explorer (Sunucu Gezgini)’ a tıklanarak sunucuyla bağlantı kurulur ve sunucu bağlantıları sağ kısımda görüldüğü üzere belirlidir. Bu kısımdan ortadaki boş alana istenilen tablolar sürüklenip bırakılır, ilişkisel veritabanları arasındaki bağlantı otomatik olarak oluşturulur. Ayrıca sağ tarafta boş kalan alanda ise eğer bir metod ya da saklı yordam eklenmişse listelenir.
  4. Oluşan .dbml dosyasına bağlı olan kod dosyası (.cs) incelendiğinde arka tarafta gerçeklenen kodlara ulaşılacaktır, LINQ kullanılarak yeni bir tablo oluşturmak için bu kodlar gerçeklenmelidir. Kod kısmındaki en önemli sınıf DataContext sınıfıdır, “framework” e giriş bu sınıf aracılığıyla sağlanır, bu sınıfla veritabanı programatik ortama bağlanmış olur. Ayrıca referans kısımlarına dikkat edildiğinde System.Data.Linq ve System.Data.Linq.Mapping ek olarak gelmiştir, yeni tablo oluşturulurken bu referanslar eklenmelidir.
  5. Sadece select ifadesiyle gerçeklenen bir işlem ve sonuçları şu şekildedir:
Dbml’ le oluşan “NorthwindDataContext” le yeni bir veritabanı bağlantısı oluşturulur. Sorgu kısmına bakıldığında SQL’ de gerçeklenen ifadelerle büyük oranda benzer olduğu görülmektedir. Dikkat edilecek olunursa “Order” ve “OrderDetail” olmak üzere iki farklı tablo bulunmaktadır, bu tablolardan “OrderDetail” sorgulanmaktadır ancak “p.Order.CustomerID” ifadesiyle diğer tablodaki bir veri üzerinden kısıtlama yapılmaktadır, ilişkisel tablolar arasındaki geçiş oldukça kolay bir şekilde gerçeklenmektedir. Sonuç olarak tüm sütunların gelmemesi için “select” den sonraki “new” ifadesiyle yeni bir şablon oluşturulmuştur. Aynı şekilde tabloya yeni veriler eklenebilir, tablodan veri silinebilir ve tablo üzerinde güncelleme yapılabilir. LINQ veritabanı üzerinde gerçekleştirilebilen bütün uygulamalar için destek sağlamaktadır. Select ifadesinin sonra yazılmasının sebebi ise çoğu programcının sorgu yazarken diğer ifadeleri yazdıktan sonra o kısmı eklemesidir, bu şekilde programcının işi kolaylaştırılmaya çalışılmıştır.
Kaynak: http://www.bidb.itu.edu.tr/

Yayınlayan : Mansur İşçel

ASP.NET DataList Kullanımı




Bu makalemizde DataList kullanarak verileri nasıl listeleyebileceğimizi öğreneceğiz. Bildiğiniz gibi gridview de listeleme işleminde her satır için bir kayıt gelir, DataList’de ise bu özeliği değiştirebiliriz. Aşağıdaki resimde görüldüğü gibi ürünler yan yana üçerli şekilde gösterilmiştir. Kayıtlarımızı bu şekilde göstermenin en kolay yolu DataList kullanmaktır.
Basit bir örnekle Datalist kullanımını anlatalım. İlk oalrak ürünlerimizi kaydedeceğimiz veritabanını oluşturalım. Örneğimizde kullanacağımız veritabanı yapısı aşağıdaki gibi olacaktır.
Yukarıdaki tablomuzu oluşturduktan sonra tablomuza örnek ürün girişi yapalım. Biz toplam 6 ürün giriş yaptık. Resimlerle çok uğraşmamak içinde internete herhangi bir alışveriş sitesindeki resimlerin url adreslerini tablomuzdaki ResimUrl kolonuna yazdık
Datalist kullanırken ürünleri yan yana göstermek için RepeatDirection özelliği vertical olmalıdır. Yan yana kaç kayıt göstermek istiyorsak RepeatColumns özelliğini kullanarak da bunu ayarlarız. Biz örneğimizde yan yana 3 kayıt göstermek istediğimiz için bu değerleri aşağıdaki gibi ayarladık.
RepeatDirection=”Vertical” RepeatColumns=”3″
Datalist için oluşturduğumuz htmş kodumuz aşağıdaki gibi oldu.
////////////////////////////////////////////////////////////////////////////////////////////////////////////
<asp:DataList RepeatDirection=”Vertical” RepeatColumns=”3″ID=”UrunlerDataList” runat=”server” DataKeyField=”UrunId”
OnItemCommand=”UrunlerDataList_ItemCommand” >
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<table width=”200px”>
<tr>
<td>
<asp:ImageButton CommandName=”DetayGoster”CommandArgument=’<%#Bind(“UrunId”) %>’
ID=”urunresim” ImageUrl=’<%#Bind(“ResimUrl”)%>’ runat=”server” />
</td>
</tr>
<tr>
<td>
<asp:Label ID=”Label1″ runat=”server”Text=’<%#Bind(“UrunAdi”) %>’></asp:Label>
</td>
</tr>
</table>
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:DataList>
////////////////////////////////////////////////////////////////////////////////////////////////////////////
Ürüne ait resmi gösterdiğimiz ImageButton için CommandName ve CommandArgument değerlerini setleyerek OnItemCommand eventi içine aşağıdaki kodu yazıyoruz
protected void UrunlerDataList_ItemCommand(object source,DataListCommandEventArgs e)
{
string urunid = e.CommandArgument.ToString();
string url = ”urundetay.aspx?urunid=” + urunid;
Response.Write(“<script>javascript:window.open(‘” + url +”‘,’urun detay’,'menubar=1,resizable=1,width=350,height=250′ )</script>”);
}
ImageButton tıklandığı zaman açılacak popup’a ürün idsini bir querystring ile gönderiyoruz, ürün detay sayfası da aldığı bu ürün id ile
ürünün detay bilgilerini alıp gösteriyor. Bizim örneğimizde detay bilgisi yok, siz kendi uygulamanıza göre düzenleme yapabilirsiniz.
Yayınlayan : Mansur İşçel
Kaynak: http://www.yazilimmutfagi.com

ASP.NET ile Mail Gönderme




Bu makalemizde ASP.NET ve C# ile SMTP server üzerinden mail gönderme kodlarınız yazacağız.
Öncelikle yeni bir ASP sayfası açıyoruz istediğiniz dizaynı yaptıktan sonra forma 3 tane textBox, 1 tane Label ve 1 tane de buton oluşturuyoruz,  TextBox’ un adları : ” txtKonu, txtMesaj ve txtEmail”. Label’in  adını txtSonuc yapıyoruz. txtKonu’ya oluşturulan formadan konuyu giriyoruz, txtMesaj’ a  gönderilecek mesajı yazıyoruz, txtEmail’ e ise gönderen kişinin mail adresi yazılacak. txtSonuc label’ine de maili gönder butonuna bastıktan sonra hata var ise  catch yapısından dönen sonuç görüntülenecek. Aşağıdaki kodu oluşturduğunuz butonun click event’ ine yapıştıryoruz. Bu kodlar % 100 çalışmaktadır.
Kolay gelsin.
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Net;
using System.Net.Mail;
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnGonder_Click(object sender, EventArgs e)
{
try
{
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(“smtp mail sunucunuz”);
smtp.UseDefaultCredentials = true;
smtp.EnableSsl = false;
smtp.Port = 587;
System.Net.NetworkCredential cred = new System.Net.NetworkCredential(“mail nereye gidecek”, “gidecek mail şifresi”);
System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
smtp.Credentials = cred;
mail.Priority = MailPriority.High;
mail.To.Add(“mail gidecek diğer adres”);//isteğe bağlı
mail.To.Add(“mail gidecek diğer adres 2″);//isteğe bağlı
mail.From = new System.Net.Mail.MailAddress(“mail nereye gidecek”);
mail.Subject = txtKonu.Text;
mail.Body = (txtMesaj.Text + ” gönderen kişinin e-maili:” + txtEmail.Text);
mail.IsBodyHtml = false;
smtp.Send(mail);
}
catch (Exception ex)
{
txtSonuc.Text = ex.Message;
}
}
}

Yayınlayan : Mansur İşçel