13 Nisan 2009 Pazartesi
ASP.NET te En Basit INSERT Cümlesi
Bir yazılımda veri tabanı kullanıyorsak olmazsa olmazımız bu veritabanına veri eklemektir. Ben burada iki şekilde insert cümlesi yazmayı anlatmaya çalışacağım.
Birincisi en temel sayılan direkt yazılımın içine yazdığımız INSERT cümlesidir.
Veri Kaydetmek istediğimiz butonun altına aşağıdaki kodu yazıyoruz.
using System.Data.SqlClient; //Bunu eklemeyi unutmayın
SqlConnection con = new SqlConnection("server=.\\sqlexpress;database=databaseadımız;uid=varsakullanıcıadımız;pwd=varsaşifremiz"); //Connection cümlemizi yazıyoruz ve programın hangi veritabanına bağlanacağını ve varsa veritabanımızın kullanıcı adı ve şifresini belirtiyoruz.
string ekle = "insert into tblbilgileri(Ad,Soyad,Adres,Yas) Values ('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox3.Text + "','" + TextBox4.Text + "')"; // Burada yazdığımız cümleyi direkt SqlDataAdapter içinede yazabiliriz. Ben burada insert cümlesini bir string değişkene atayıp oradan SqlDataAdapter içine aldım. Siz dilerseniz bu string değişkenini tanımlamayıp, insert cümlesini direkt DataAdapterda yer alan ekle kısmına yazabilirsiniz.
SqlDataAdapter sadp = new SqlDataAdapter(ekle,con); // Daha Sonra bir DataAdapter belirliyoruz...
DataAdapter Nedir?
DataAdapter nesnesi Connected ve Disconnected bağlantı yapısı ile veri arasında köprü vazifesi görür. Veritabanınızdan çektiğiniz veriyi DataSetinize doldurmak yada DataSetinizde güncellenerek cachelenmiş verilerinizi veri kaynağınızda da güncellemek için istediğiniz zaman DataAdapter nesnesini kullanabilirsiniz. Güncelleme işlemlerini daha ileri konuları içeren makalelerimizde göreceğiz. Konuyu daha fazla dağıtmamak için şu anda bu nesnenin DataSet ile kullanımı ve veriye erişim konuları üzerinde yoğunlaşmalıyız.
Bilmeniz gereken bir-iki ufak ayrıntı da şunlar:
- DataAdapter Disconnected Data ile çalışmak için tasarlanmıştır.
- DataAdapter ve DataSet arasında direkt olarak bir bağlantı yoktur.
DataAdapter ile DataSete veri doldurulurken database bağlantısı kapalı ise açılır, dataset doldurulur ve işlem bittiği anda otomatik olarak kapatılır. Eğer bağlantı halihazırda açıksa herhangi bir hata vermeden işlemi yapar ve bağlantıyı kapatarak işlemini sonlandırır. Böylece bizlerin de fazla detayla uğraşmadan hızlıca işlemlerimizi yapmamızı sağlar.
Kullanımına gelince; Temelde iki adet argüman alır. Bunlardan birincisi DataSete doldurmak istediğimiz veriyi belirten “SELECT * from Nothwind” gibi bir SQL cümlesidir. Ikincisi ise bağlantıyı açıp veriyi almasını ve bağlantıyı kapatmasını sağlayan Connection String adını verdiğimiz databasee bağlantı cümlesidir. Son olarak DataSete veriyi doldururken de Fill() methodu kullanılır.
DataSet ds = new DataSet();
sadp.Fill(ds); // DataAdapter ımızı Dataset imize dolduruyoruz ediyoruz.
Response.Write("Veri Eklendi"); // Ekrana Veri Eklendi Yazıyoruz
foreach (Control c in this.Page.Form.Controls)
{
if (c is TextBox)
{
((TextBox)c).Text = string.Empty;
}
} // Bu kod veri eklendikten sonra Textboxları temizliyor.
Kodu baştan ytazarsak şu hale geliyor.
using System.Data.SqlClient;
SqlConnection con = new SqlConnection("server=.\\sqlexpress;database=databaseadımız;uid=varsakullanıcıadımız;pwd=varsaşifremiz");
string ekle = "insert into tblbilgileri(Ad,Soyad,Adres,Yas) Values ('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox3.Text + "','" + TextBox4.Text + "')";
SqlDataAdapter sadp = new SqlDataAdapter(ekle,con);
DataSet ds = new DataSet();
sadp.Fill(ds);
Response.Write("Veri Eklendi");
foreach (Control c in this.Page.Form.Controls)
{
if (c is TextBox)
{
((TextBox)c).Text = string.Empty;
}
}
İkincisi ise bir Class kullanarak veri kaydetme yoludur.
Öncelikle App_Code klasörüne sağ tıklıyoruz ve Add New Item diyoruz. Karşımıza çıkan pencereden bir Class seçiyoruz. Adına verigetir diyoruz ve Add butonuna basarak class ımızı ekliyoruz.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
///
/// Summary description for VeriGetir
///
public class VeriGetir
{
static SqlConnection con = new SqlConnection("server=.\\sqlexpress;database=databaseadımız;uid=varsakullanıcıadımız;pwd=varsaşifremiz");
public DataTable dt = new DataTable();
public VeriGetir(string query)
{
SqlDataAdapter da = new SqlDataAdapter(query, con);
da.Fill(dt);
}
public static int verikaydet(string query)
{
if (con.State != ConnectionState.Open)
{
con.Open();
}
SqlCommand com = new SqlCommand(query, con);
return com.ExecuteNonQuery();
}
}
Class ımıza yazacağımız kodları yukarıda verdim. Bu Class sayesinde hem Select hende Insert işlemlerimizi yapabiliriz. Önece bir insert işlemi yapalım.
Yine veri kaydedeceğimiz butona tıklıyoruz ve kod sayfasına şu kodu yazıyoruz.
using System.Data.SqlClient; // Bunu eklemeyi unutmayın
VeriGetir.verikaydet("insert into tblbilgileri(Ad,Soyad,Adres,Yas) Values ('" + TextBox5.Text + "','" + TextBox6.Text + "','" + TextBox7.Text + "','" + TextBox8.Text + "')");
foreach (Control c in this.Page.Form.Controls)
{
if (c is TextBox)
{
((TextBox)c).Text = string.Empty;
}
}
Bukadar. Sadece tek satır Insert cümlesiyle veri kaydetme işlemini gerçekleştiriyoruz.
Aynı şekilde select cümlemizi yazarkende
VeriGetir ver = new VeriGetir("select * from tabloadi");
İşte bukadar Class kullanmak yazılımlarınıza hem hız kazandırır hemde kodları okurken daha rahat edersiniz.
SQL Komutları
Order ByBu komut ile belirtilen kolona göre artan veya azalan bir sıralama ile sorgulama yapabiliriz.
ASC : kullanarak küçükten büyüğe doğru artan sıralama yapabiliriz.
DESC : kullanarak büyükten küçüğe doğru azalan sıralama yapabiliriz.
Ancak ASC kullanmak zorunlu değildir. Çünkü default sıralama tipi ASC'dir. Aynı anda birkaç kolon üzerindende sıralama yapabiliriz.
SELECT * FROM personel ORDER BY isim ASC;
Bu query ile personel tablosundaki bütün kayıtları ad'a göre küçükten büyüğe dogru sıralayabiliriz.
SELECT * FROM personel ORDER BY isim DESC;
Bu query ile personel tablosundaki kayıtları büyükten küçüğe dogru sıralar.
SELECT * FROM personel ORDER BY isim,soyisim;
Bu query kayıları isime göre artan bir sıralama yapar. Ancak aynı isim ile yaratılmış birden fazla kayıt var ise bunları soyisim sırasına göre artan bir şekilde sıralar.
En çok kullanılan sıralama ise ID ye göre sıralamadır. Örneğin bir haber tablonuz var ve en son eklenen 10 haberleri çekmek istiyorsunuz. Bu durumda query i şu şekilde yazıyoruz.
SELECT TOP10 * FROM Haberler ORDER BY Haber_ID DESC;
Bu query ile veri tabanımızda yer alan son 10 haberi çekiyoruz.
Where
Yukarıda yaptığımız sorgulamaların hepsinde hiç bir koşul belirtmedik.Yani bütün kayıtları tablolardan çektik. Ancak gerçek hayat'ta bu kayıtların sadece bir kısmına ihtiyaç duyarız.Bize gerekli olan dataları diğerlerinden ayıran bazı özellikleri vardır. İşte bu özellikleri bu komut yardımı ile kullanarak gerekli datalara ulaşabiliriz.
Örneğin sadece adı Emrah olan verileri çekmek istiyoruz. O zaman query imizi şu şekilde yazıyoruz.
SELECT * FROM personel WHERE isim='Emrah'; Burada personel tablomuzun isim kolonu altındaki Emrah yazan verileri getirdik.
Sorgumuzu biraz daha geliştirelim ve sadece 500 ile 600 TL maaş alanları çekelim.
SELECT * FROM ucretler WHERE aylik_ucret BETWEEN 500 AND 600 ; Burada ucretler tablomuzun aylik_ucretler kolonu altındaki 500 ve 600 TL maaş alanları getirdik.
Like
İçinde belli bir karakter dizisi bulunan datalara ulaşmak istersek kullanabileceğimiz bir operatördür.
SELECT * FROM personel WHERE adres LIKE '%Eskişehir%' ;
Bu sorgulama ile adres alanında Eskişehir geçen kayıtları listelemiş oluruz.
SELECT * FROM personel WHERE adres LIKE '%Eskişehir' ;
Bu sorgulama ile adres alanının sonunda Eskişehir geçen kayıtları listelemiş oluruz
SELECT * FROM personel WHERE adres LIKE 'Eskişehir%';
Bu sorgulama ile adres alanının başında Eskişehir geçen kayıtları listelemiş oluruz
SQL'de Yeni Bir Kayıt Eklemek
Tabloya yeni bir satır eklemek istersek INSERT INTO sözcüğünü kullanırız.
INSERT INTO tablo adı(kolon1,kolon2,kolon5,kolon8) VALUES (deger1,deger2,deger6,deger7);
Mesela personel adında bir tablomuz var. Bu tablonun içindede isim,soyisim ve adres kolonları var. Bu tabloya veri eklemek istiyoruz.
INSERT INTO personel(isim,soyisim,adres) VALUES (Emrah,Akın,Eskişehir); Bu query ile verimizi eklemiş oluyoruz. Fakat dikkat ederseniz biz burada eklenecek veriyi insert cümlemizin içine yazdık. Peki bu verileri textbox lardan nasıl alırız?
INSERT INTO personel(isim,soyisim,adres) VALUES (' " + TextBox1.Text + " ' , ' " + TextBox2.Text + " ' , ' " + TextBox3.Text + " '); Bu şekilde istediğimiz yerdeki veriyi alıp veritabanımıza ekleyebiliriz. Burada dikkat edilmesi gerek en önemli şey kolonsayısı ile Values den sonra gelen değer sayılarının aynı olmasıdır. Ben burada örnek veririken sql cümlelerinin salt halini kullanıyorum. Fakat bu cümleler program içinde kullanılırken belli parantezler ve tırnaklar içinde yazılır. Programlarınızda bu cümleleri kullanırken bu konuya özen gösterin.