Etiket Arşivi: c# ExecuteNonQuery

C# ADO.NET Parametreli Islemler

Ado.NET giriş konulu yazımızda ExecuteScalar, ExecuteNonQuery ve ExecuteReader konularını yazmaya çalıştık.  Bu sefer Insert işlemini parametreli olarak yapmaya çalışacağız. Aşağıdaki gibi bir form tasarımımız var.

2 adet groupBox’ımız var baştaki groupBox’ın içine ID, UrunAd, Fiyat ve Kategorisini göstermek için labellar ve textboxlar ekliyoruz. Kategori kısmını seçmek için combobox ekliyoruz 1 adet’te yeni kayıtlar için kaydet butonu koyuyoruz. Alttaki groupBox’a ise listeleme işlemini göstermek için listview ekliyoruz.

FormUrun

Form tasarımı işleminden sonra kodlama kısmına geçiyoruz. Öncelikle bağlantı cümlemizi yazıyoruz.

SqlConnection baglan = new SqlConnection(“Server=.;Initial Catalog=Northwind;Integrated Security=true”);

Ürünleri getir adında bir metot oluşturuyoruz.

void UrünleriGetir()
{
listView1.Items.Clear();
SqlCommand cmd = new SqlCommand("Select c.categoryId, p.ProductName,p.UnitPrice,c.CategoryName,p.ProductID from products p inner join categories c on c.categoryId=p.categoryId", baglan );

baglan.Open();
SqlDataReader rd = cmd.ExecuteReader();

while (rd.Read())
{
ListViewItem list = new ListViewItem();
list.Text=rd["ProductId"].ToString();
list.SubItems.Add(rd["ProductName"].ToString());
list.SubItems.Add(rd["CategoryName"].ToString());
list.SubItems.Add(rd["UnitPrice"].ToString());
list.SubItems.Add(rd["CategoryId"].ToString());

listView1.Items.Add(list);

}
cnn.Close();
}

Yazdığımız kodu açıklayacak olursak, birden fazla yerde bu metodumuzu çağıracağımız için yeni ekleme yaptığımız yerlerde ekleme yaptığımız ürünü o anda görmek için listview’ı temizliyoruz.

Sql cümlemizi SqlCommand içinde yazıyoruz. sorgumuzdan sonra virgül koyup baglantımızın adını tanıtmamız lazım yoksa bize sorgu bağlantınız açın diye hata döner.

Baglantıyı açıp sorgumuzu ExecuteReader ile okuyup SqlDataReader değişkenimize atıyoruz. ExecuteReader bize SqlDataReader sonucu döndüreceği için bu işlemi yaptık.

while döngüsü ile SqlDataReader tipinde oluşturduğumuz değişkenimizi SqlDataReader’ın Read() metodu ile okuyoruz, yani demek istediğimiz okuyacak veri olduğu sürece while döngüsünde dönmesini istiyoruz.

Okuduğumuz verileri listview’e eklemek için listviewItem ınstance’ını alıyoruz. ve aldığımız ınstance’ın özelliklerinden text’ine oluşturduğumuz rd değişkenindeki [“ProductId”] kolonunu ekle diyoruz. burda index numarasınıda belirtebiliriz yani rd[0], textini ekledikten sonra subıtem’larını yani alt alanlarını diğer kolonlarla dolduruyoruz en sonunda listview’imizi doldurduğumuz listviewItem değişkenini listview1’in item’larına ekliyoruz.
son olarak bağlantımızı kapatıyoruz.

Şimdi ise Kategorileri Getir adında bir metot oluşturuyoruz.

void KategorileriGetir()
{
SqlCommand cmd = new SqlCommand("Select CategoryId,CategoryName From Categories",baglan);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);

cmbKategori.DataSource = dt;
cmbKategori.DisplayMember = "CategoryName";
cmbKategori.ValueMember = "CategoryID";

}

Kodu açıklayacak olursak yukarıdaki gibi SqlCommand ile sorgu cümlemizi yazıyoruz. Bu sefer yazdığımız sql sorgusunu SqlDataAdapter ile tutuyoruz ve DataTable ınstance’ı alarak yeni bir DataTable nesnesi oluşturuyoruz. sorgumuzu tuttuğumuz SqlDataAdapter nesnesini Fill metodu ile DataTable nesnemize yani dt isimli değişkenimize atıyoruz. Şuan sorgudan dönen sonucumuz bizim oluşturduğumuz DataTable nesnesinde DataTable ise sanal bir tablo görevi görmektedir.

Sıra şimdi oluşturduğumuz comboboxların içini doldurmaya geldi Combobox’ın datasource özelliği ile direk içini doldurabiliyoruz. DataSource özelliğine DataTable nesnemiz olan dt yi verdik. DisplayMember’ını yani görünecek olan kısmını CategoryName olarak belirledik. ve ValueMember’ını yani CategoryName karşılık gelen CategoryID sini belirledik.

Şimdi ise eklediğimiz butonun tıklandığı zaman ne yapacağını kodlamaya geldi.

private void btnKaydet_Click(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand("Insert Into Products(CategoryID,UnitPrice,ProductName) Values(@KategoriId,@fiyat,@ad)", baglan);
cmd.Parameters.AddWithValue("@KategoriId", cmbKategori.SelectedValue);
cmd.Parameters.AddWithValue("@fiyat",Convert.ToDouble(txtFiyat.Text.Trim()));
cmd.Parameters.AddWithValue("@ad", txtAd.Text.Trim());

baglan.Open();
cmd.ExecuteNonQuery();
baglan.Close();

UrünleriGetir();

}

Yukarıda ki kodu açıklayacak olursak yine SqlCommand ile Sql Sorgumuzu yazıyoruz. Kaydet butonuna bastığımız zaman veri tabanına ekleme sorgumuzu yazıyoruz. value değerlerini dışarıdan parametre ile alacağımız için @ işareti ile parametrelerini tanımladık. ilk parametremizi dolduralım “@kategoriId” yazıp virgülden sonra kategoriId ye gelecek değerin hangi nesneden gelceğini yazıyoruz Combobox’ın selectedValue’su yani yukarı valuemember olarak categoryId sini belirttiğimiz için kategoryId’yi göndericek. diğer parametrelerde aynı bu şekilde doldurulur. Sonrasında baglantımız açılıp ExecuteNonQuery metodumuz çağırılır. Bu metot ile insert işlemini gerçekleştirmiş oluruz. Sonrasında da baglantımızı kapatırız. Eklediğimiz kaydı görmek için UrunleriGetir metoduna gideriz.

Ekstra olarak listview’de seçtiklerimizi textboxlara ve combobox’ta göstermek için listview’ın SelectedIndexChanged eventini aşağıdaki kodları yazıyoruz. Listview’e çift tıkladığımızda bu event açılır. Aşağıdaki kod satırlarında ise oluşturduğumuz listview’ın FocusedItem özelliği ile oluşturduğumuz item ismindeki listview ınstancemızın SubItems’larındaki index numaralarına göre text’indekileri göstermek istediğimiz nesnelerimizin text’ine gönderiyoruz.

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listView1.FocusedItem != null)
{
ListViewItem item = listView1.FocusedItem;
txtAd.Text = item.SubItems[1].Text;
lblID.Text = item.SubItems[0].Text;
txtFiyat.Text=item.SubItems[3].Text;

cmbKategori.SelectedValue = item.SubItems[4].Text;

}
}

Formumuzun Load’ında  UrünleriGetir ve KategorileriGetir metodunu çağırıyoruz.

private void FormUrunler2_Load(object sender, EventArgs e)
{
UrünleriGetir();
KategorileriGetir();
}

Böyle bir örneklede bu konuyu anlatmaya çalıştık, Sorularınızı yorum olarak bırakabilirsiniz.