Sql

Visual Studio ile kodlama yaparken sayısal ifadeleri farklı bir renk ile vurgulamayı adet edinmişimdir. Bu şekilde kodu okumak daha pratik gelmiştir bana. Kod örneklerimden de bunu farketmek mümkün. Sql Server 2005 Management Studio ile değil ama 2008 ile aynı vurguyu yapmak mümkün olabiliyor. Nihayet :)

Peki nasıl yapıyorum;
Sql Server 2008 Management Studio uygulamasını açıyoruz. Tools -> Options -> Environment -> Fonts and Colors altında Display items altında ki Number seçeneğini tıklıyoruz. Item foreground özelliğini Purple yada tercih ettiğimiz bir rengi seçiyoruz.

Sql Font Setting

Örnek:
Sql Font Color

Şöyle bir düşündüğümüzde veritabınında bulunan herhangi bir tablonun verilerini Xml biçiminde dosyaya yazmanın kaç yolu vardır acaba? Sabahları genelde işe erken gelirim, 1.5 saat kadar :).
Oturdum bir kaç örnek yaptım, paylaşıyorum tüm dünya ile. (Özgüvenin tavan yaptığı an)

Aklıma gelen ilk yöntem DataTable nesnesini kullanmak. Bu nesneyi sadece yazmak için kullanmak kaynak tüketimi açısından çok iyi bir seçim olmaz fakat kullanım kolaylığı açısında tercih edilebilir.

DataBase 2 Xml
 

Diğer bir yöntem ise henüz Veri Katmanında (DataLayer) iken oracıkta xml formatına dönüştürüp XmlTextWriter ile cayır cayır yazmak.

DataBase 2 Xml

Son yöntem ise daha önce şu yazıda kullandığım teknik ile (attribute yerine bu sefer node kullandım) XDocument ile manuel olarak xml dosyasını oluşturmak. Sanırım en zoru bu. Yanlış anlaşılmasın benim için kolay da hani ilk yapan için diyorum.

DataBase 2 Xml

Öğrencilerimin en sık sorduğu sorulardan biri de, veritabanında depolanmış resimleri web sayfasında nasıl gösterildiğidir. Internette bu konu hakkında zilyon tane yazı olmasına karşın bir tane yazma gereği hissettim.

Öncelikle anlaşılması gereken konu, html sayfalarında resim göstermenin ilk koşulu resmin fiziksel yolunun kontrole yada etikete aktarılmasıdır.
Örneğin;

<img src="/images/bullet.png" alt="Bullet" />

Diğer taraftan baktığımızda ki bu taraf veritabanı tarafıdır, resim gibi içeriklerin hangi tip veri alanında saklanacağıdır.
C# ile yazılım geliştiryorsanız resim yada bir dosya serileştiğinde (yani veritabına yazıldığında) byte dizisinden ibaret olacaktır. Bu durumda en uygun  alan tipi varbinary olsa iyi olur. :)

Kaçınılması gereken davranışlar.

<img src='<%# Eval("resim") %>' alt="Bullet" />

yada

img1.ImageUrl = reader[1].ToString();

hiç olmadı :)

img1.ImageUrl = command.ExecuteScalar().ToString();

Yapılması gereken gayet açık. Veritabınından okunan byte dizisini resim formatında dışarı aktaracak (response) bir dosya (aspx,ashx) oluşturmak ve oluşan dosyanın yolunu resmi gösterecek kontrol yada etikete atamaktır.

Örnek tabloda gösterildiği gibi resim UrunResim alanında varbinary (byte dizisi) olarak saklanıyor.

Resmi oluşturacak resim.aspx sayfasına gönderilen parametre değeri ile veritabanında basit bir sorgu yapılarak ve sonucu byte dizisi olarak elde edilir.

protected void Page_Load(object sender, EventArgs e)

   SqlConnection con = new SqlConnection
("Data Source=.;Initial Catalog=calismalar;Integrated Security=True;");
   SqlCommand com = new SqlCommand
("select UrunResim from Urunler where UrunId = @UrunId", con);
   com.Parameters.AddWithValue("@UrunId", Request["id"
]); 
   con.Open(); 
   byte[] resim = (byte
[])com.ExecuteScalar(); 
   con.Close(); 
   Response.ContentType = "image/png"

   Response.BinaryWrite(resim);
}

Son olarak ise sayfa çıktısının resim olacağını işaret eder ve çıktıyı BinaryWriter metotu ile oluştururuz.

Ben Xml'i severim de herkes sevmek yada bilmek zorunda değil. Xml ile yaptığım anket uygulamasını Sql ve Ado.Net kullanarak tekrar yaptım.

Veritabanı şeması aynen aşağıdaki gibi;

Database Diagram

Uygulamada kullanılan nesne diyagramı;

Class Diagram

Uygulamada kullanılan örnek kod;

OyVer

Uygulama kaynak kodları da burada.

Bildiğiniz gibi verileri Hash'lemek için bir çok yöntem var. Bunlara alternatif olarak Ms Sql Server içindeki HashBytes sistem fonksiyonu ile de yapmak mümkün.

Fonksiyon iki adet parametre alır. İlk parametre Hash algoritmasının adı (MD2, MD4, MD5, SHA, SHA1) diğeri ise Hash'lenecek veri(varchar, nvarchar, varbinary). Fonksiyondan geriye ise varbinary tipinde değer döner (8000 bytes).

Örnek olarak, web uygulaması için basit bir login işlemi yapalım.

Örnek tablo:

create table

Kayıt eklemek için bir procedure.

Create proc insertuser

Son olarakta kullanıcı kontrolü yapan bir procedure.

create proc validateuser

Script

Arama