14 Şub 2010

SqlCommand Nesnesi Kullanımı

Yazan: Levent | kATEGORi: .Net, Ado.net, C#, Database

Bir önceki yazımızda c# uygulamamızı, veritabanına nasıl bağlayacağımızı görmüştük. Bunu da sqlconnection bağlantı nesnesini kullanarak gerçekleştirmiştik. Bugün ise sqlcommand üzerinde duracağız. sqlcommand nesnesi veritabanı üzerinde sorgulama , ekleme,silme ve güncelleme işlemlerini gerçekleştirebileceğimiz connected layer için en çok kullandığımız nesnedir. Geçen yazımızda FILMS adında bir veritabanı oluşturmuştuk. Bugün ise o veritabanına bir tablo ekleyeceğiz ve bu tablodan bazı sorgulamaları command nesnesi yardımıyla gerçekleştireceğiz. Önce server explorer alındaki data connections kısmından daha önce oluşturduğumuz FILMS veritabanını genişletelim ve altındaki tables a sağ tıklayıp yeni bir tablo oluştur diyelim. Tablomuzu aşağıdaki gibi düzenleyelim.




FilmID yi primary key olarak belirleyelim ve  coloumn properties ten Identity specification dan Is Identity i yes yapalım seed ve increment 1 olsun. Tablomuzu kaydedelim ve ismine ImdbTopTen diyelim. Sıra geldi tablomuza veri koymaya. Yine tables kısmından oluşturduğumuz ImdbTopTen tablosuna sağ  tıklayarak  show table data diyelim ve açılan sayfadan verilerimizi girelim. Ben şu şekilde girdim.





Tablomuzu doldurduktan sonra yeni bir windows forms projesi yaratalım ve formumuzn üzerine 2 tane button sürükleyelim isimleri btnExecuteScalar ve btnExecuteReader olsun. Sonra view code diyerek önce connection string imizi oluşturalım tabi “using System.Data.SqlClient;”  alanını projemize dahil ettikten sonra.

SqlConnection connFilms = new SqlConnection(@”Data Source= .\SQLEXPRESS;

Initial Catalog=FILMS;Integrated Security= True”);



Sıra geldi command nesnesini oluşturmaya.

SqlCommand scalarCommand = new SqlCommand(); ile nesnemizi oluşturduktan sonra bu nesneye bazı özellikler bağlamalıyız. Örneğin CommandType ; sql komutumuzun tipini belirtir.

CommandType.Text ,kullanacağımız sql sorgusunun text olduğunu; CommandType.StoredProcedure, sql sorgusunun stored prosedür olarak yapılacağını belirtir.



scalarCommand.Connection = connFilms; commandımız connFilms  bağlantısı üzerinden çalışacak.

scalarCommand.CommandType = CommandType.Text; commandımız text tipinde olsun.
scalarCommand.CommandText = @”Select FilmAdı from ImdbTopTen where ImdbSıra=5″; textimizdeki sql sorgusu.



Command nesnesine özelliklerimizi bağladıktan sonra bağlantımızı açıp Execute metodlarından birini kullanarak sorgumuzu gerçekleştirmeliyiz. Command ı execute etmek için 4 tane metodumuz var.

ExecuteScalar() metodu, sorgularımızın tek bir değer(cell) döndüreceği zaman kullanılmalıdır.
ExecuteReader(), sorgularımızın birden fazla değer döndüreceği durumlarda kullanılmalıdır.
ExecuteNonQuery(), sorgularımızdan etkilenen satır sayısını döndürür.
ExecuteXmlReader(),sorgularımız sonucu veritabanından verileri xml formatında döndürür.



Bağlantıyı açıp sorgu emrini şu şekilde veriyoruz.

connFilms.Open();
string _filmadı = (string)scalarCommand.ExecuteScalar();
Command nesnesinin ExecuteScalar metodu bize object tipinde bir obje dönecek. Bunu string e cast ediyoruz ve sorgumuzun sonucu artık elimizde..
ExecuteReader() metodunun, ExecuteScalar() dan command nesnesine bağlanması açısından hiç bir farkı yok. Metodların tek farkı ExecuteReader da bir yerine birden çok değerin dönmesi. Dönen bu kayıtlara DataReader nesnesi sayesinde ulaşabiliyoruz.



SqlCommand readerCommand = new SqlCommand(); command nesnesi oluşturuluyor
readerCommand.Connection = connFilms; commandın hangi bağlantıda kullanılacağı belirleniyor
readerCommand.CommandType = CommandType.Text; commandımızın tipi text olarak belirleniyor
readerCommand.CommandText = @”select FilmAdı,IMDBSıra,Puan from ImdbTopTen”; sql sorgumuz texte yazılıyor
connFilms.Open(); bağlantı açılıyor
SqlDataReader reader = readerCommand.ExecuteReader();



Execute.Reader() metodunun dönüş tipi SqlDataReader tipinde olduğundan bu tipte bir değişkene atama yapıyoruz. Yani SqlDataReader ın bir yapıcı metodu yoktur. SqlDataReader command içindeki ExecuteScalar() metodunun içinde yaratılır ve geriye dönüş değeri olarak kullanılır.
reader nesnesinin görevi tablomuzdaki herbir satırı tutmaktır. reader nesnesine ait Read() metodu ise bir sonraki satırın başına konumlanmamızı sağlar. Bu şekilde tıpkı sıradan erişimli dosya okur gibi tablolarımızı okuyabiliriz.
reader["FilmAdı"],  FilmAdı kolonunda ilgili satırda bulunan hücreyi tutar. reader[0] da aynı görevi üstlenir. 0 tablomuzun kolonunun indisidir. Ancak rakam yerine kolon adlarının belirtilmesi daha uygundur. Örneğin tabloda kolonların yerlerini değiştirdiğimizde indis numarasını da değiştirmek zorunda kalırız ancak kolon isimlerini kullanırsak böyle bir derdimiz olmayacaktır.



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace CommandOrnegi
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        SqlConnection connFilms = new SqlConnection(@"Data Source= .\SQLEXPRESS;
                    Initial Catalog=FILMS;Integrated Security= True");

        private void btnExecuteScalar_Click(object sender, EventArgs e)
        {
            try
            {
                SqlCommand scalarCommand = new SqlCommand();
                scalarCommand.Connection = connFilms;
                scalarCommand.CommandType = CommandType.Text;
                scalarCommand.CommandText = @"Select FilmAdı from ImdbTopTen where ImdbSıra=5";

                connFilms.Open();
                string _filmadı = (string)scalarCommand.ExecuteScalar();
                MessageBox.Show(_filmadı);

            }
            catch (Exception ex)
            {
                MessageBox.Show("eyvah! hata oluştu..");
            }
            finally
            {
                connFilms.Close();
            }

        }

        private void btnExecuteReader_Click(object sender, EventArgs e)
        {
            try
            {
                SqlCommand readerCommand = new SqlCommand();
                readerCommand.Connection = connFilms;
                readerCommand.CommandType = CommandType.Text;
                readerCommand.CommandText = @"select FilmAdı,IMDBSıra,Puan from ImdbTopTen";

                connFilms.Open();
                SqlDataReader reader = readerCommand.ExecuteReader();
                string sonuc = @"Film adı                 IMDBSıra         Puan";
                while (reader.Read())
                {
                   sonuc+=("\n"+reader["FilmAdı"].ToString() + "\t" + reader["IMDBSıra"].ToString()+ "\t"+
                        reader["Puan"].ToString());
                }
                reader.Close();;
                MessageBox.Show(sonuc);

            }
            catch (Exception ex)
            {

                MessageBox.Show("eyvah! hata oluştu..");
            }
            finally
            {
                connFilms.Close();
            }
        }
    }
}
yayaç
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Twitter
  • BlinkList
  • StumbleUpon

Etiketler: , , , , , , , ,

Yorumunu yaz..