C# İle SqlCommand Kullanımı


23 Ekim 2012 Hikmet Okumuş C#

SqlCommand, T-Sql sorguları ile veritabanı üzerinde sorgulama, ekleme, güncelleme, silme işlemlerini yapmak için kullanılmaktadır. System.Data.SqlClient namespace' i altında bulunmaktadır. SqlCommand nesnesinin özellikleri aşağıdaki gibidir.
Connection: Çalıştırılacak olan sorgunun hangi bağlantı üzerinde işlem yapacağı belirtilmektedir.
CommandType: Çalıştırılacak olan sql cümlesinin tipini belirlemek için kullanılmaktadır.
CommandText: Çalıştırılacak olan sorgu cümlesi yazılmaktadır.
Transaction: Çalıştırılacak olan sorguların kontrollü bir şekilde işlenmesini sağlamaktadır. Genellikle insert, update ve delete işlemlerinde kullanılmaktadır.
Parameters: T-Sql cümlesi ya da Stored Procedure içerisinde kullanılan parametreleri setlemek için kullanılmaktadır.
CommandTimeout: Çalıştırılacak olan sorgunun işlenme süresini belirtmek için kullanılmaktadır. Varsayılan timeout süresi 30 saniyedir.
Execute metodları aşağıdaki gibidir.
ExecuteNonQuery: Insert, update, delete işlemlerinde kullanılmaktadır. İşlem sonucuna göre geriye int tipinde değer döndürmektedir.
ExecuteScalar: Tek alanlık bir değeri geri döndürmek için kullanılmaktadır. Object tipinde veri döndürmektedir.
ExecuteReader: Birden fazla satır sonucu döndüren sorgular için kullanılmaktadır. Geriye SqlDataReader tipinde veri döndürmektedir.
Buraya kadar anlatmış olduklarımıza göre Execute metodlarını daha iyi anlamak için bir kaç örnek yapalım. İlk olarak ExecuteNonQuery metodu ile tablomuza bir adet kayıt ekleyelim.
        private void btnKayitEkle_Click(object sender, EventArgs e)
        {
            string BaglantiAdresi = "Server=.;Database=Hokumus;User Id=sa;Password=123456;";
            SqlConnection con = new SqlConnection(BaglantiAdresi);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandText = "INSERT INTO Kisiler (Adi, Soyadi) VALUES ('Ali', 'Can')";
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
        }
ExecuteScalar metodu;
        private void btnScalar_Click(object sender, EventArgs e)
        {
            string BaglantiAdresi = "Server=.;Database=Hokumus;User Id=sa;Password=123456;";
            SqlConnection con = new SqlConnection(BaglantiAdresi);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandText = "SELECT Adi FROM Kisiler";
            con.Open();
            object Adi = cmd.ExecuteScalar();
            con.Close();
        }
ExecuteReader metodu;
        private void btnReader_Click(object sender, EventArgs e)
        {
            string BaglantiAdresi = "Server=.;Database=Hokumus;User Id=sa;Password=123456;";
            SqlConnection con = new SqlConnection(BaglantiAdresi);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandText = "SELECT Adi FROM Kisiler";
            con.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            ArrayList Isimler = new ArrayList();

            while (dr.Read())
            {
                Isimler.Add(dr["Adi"]);
            }

            dr.Close();
            con.Close();
        }
SqlCommand nesnesi ile ilgili anlatılacak daha bir çok özellik bulunmaktadır. Bu özellikleri kendi makaleleri içerisinde anlatmak isterim. Buraya kadar olan kısım nesneyi kullanmak için yeterlidir.

Başarılar dilerim.



Kullanıcı Yorumları

hikmet okumuş makale yorum
Tayfun Özşahin
3/24/2014 9:17:26 PM

merhaba,
c# da oluşturduğum sql veritabanlı programıma kayıt eklerken
id numarasının gözükmesini istiyorum yani ben bilgileri kaydetmeden önce son
id nin bir fazlası formda gözüksün böylece kayıt gerçekleşince kayıt sırasında gözüken id ile
kayıt bittikten sonra gözüken id eşit olsun. mümkün mü acaba?

hikmet okumuş makale yorum
Hikmet Okumuş
3/25/2014 10:49:13 AM

Merhaba Tayfun Özşahin,

Belirtmiş olduğun işlemi ID alanının Max + 1 değerini alarak yapabilirsin. Örnek;

SELECT MAX(ID) + 1 FROM TABLO_ADI

Bu şekilde ID alanının değerini +1 olarak alabilirsin. Insert ettiğin zaman yeni kayıt ID olarak bu değeri alacaktır. Fakat aynı anda birden fazla kişi Insert yapıyorsa ekranda görünün ID değeri ile kişinin oluşturduğu kaydın ID değerleri farklı olabilir.

hikmet okumuş makale yorum
tonguç
8/5/2015 8:45:51 AM

bunu biraz açabiliirmisiniz. örnek kod la açıklamanız mümkünmü?

hikmet okumuş makale yorum
Hikmet Okumuş
8/5/2015 9:40:20 AM

Merhaba tonguç,

Makale içerisinde kullanım ile ilgili 2 adet örnek bulunmaktadır. Takıldığın konu hakkında daha detaylı bilgi verirsen yardımcı olmaya çalışırım.

hikmet okumuş makale yorum
tonguç
8/5/2015 9:50:06 AM

SELECT MAX(ID) + 1 FROM TABLO_ADI örnek verebilirmisiniz
yapmak istedğim. açılan bir formda sıra no alanı mevcut. form açıldığında en son id'ye bir ekleyip sıra no alanına yazacak ve kaydet dedikten sonra yine bir artırıp alanı doldurmasını isityorum.

yardımlarınız için teşekkürler.

hikmet okumuş makale yorum
Hikmet Okumuş
8/5/2015 10:11:45 AM

Merhaba tonguç,

Aşağıdaki gibi sana sıra no döndüren bir metodun olsun.

private void SiraNoOlustur()
{
string BaglantiAdresi = "Server=Server;Database=DB_Adi;User Id=User;Password=Pass;";
SqlConnection con = new SqlConnection(BaglantiAdresi);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "SELECT MAX(ID) + 1 FROM TABLO_ADI";
con.Open();
object siraNo = cmd.ExecuteScalar();
con.Close();
}

Yukarıdaki işlem select çekilen tabloda MAX ile belirtilen bir alanın en büyük değerine +1 ekleyerek sonuç döndürür.

Yeni butonuna bastığında ya da form açıldığında bu metodu çalıştırırsan sana bir sıra no uretecektir. Ekranda göstermek için "siraNo" değişkenindeki değeri kullanabilirsin.

Kaydet dedikten sonra tekrar yeni butonuna bastığında yeniden "SiraNoOlustur()" metodunu çağırırsan sana yeni bir sıra no bilgisi döndürecektir.

hikmet okumuş makale yorum
tonguç
8/5/2015 11:31:32 AM

metodu da gösterebilirmisin. ayrıca textboxa nasıl yazdırıyoruz?

yazmaya çalıştığım kod şöyle ;

private void button1_Click(object sender, EventArgs e)
{


try
{
baglan.Open();
komut.Connection = baglan;
komut.CommandText="select MAX(id) + 1 from gidevrtbl";
object SiraNo= komut.ExecuteScalar();

baglan.Close();

}
catch
{
MessageBox.Show("komutta hata var");

hikmet okumuş makale yorum
Hikmet Okumuş
8/5/2015 11:42:03 AM

tonguç,

Yukarıda sana nasıl ID alanına ulaşabileceğini doğrudan yazdım. Senin yazdığın kod yerine onu kullanırsan zaten sonuca ulaşacaksın.

Textbox' a yazdırma konusunda da;

textSiraNo.Text = SiraNo.ToString();

şeklinde değeri setleyebilirsin.

hikmet okumuş makale yorum
TONGUÇ
8/5/2015 12:02:35 PM

hikmet bey çok teşekkürler. işiniz gücünüz rast gitsin..

hikmet okumuş makale yorum
Hikmet Okumuş
8/5/2015 12:03:53 PM

Teşekkür ederim Tonguç.

hikmet okumuş makale yorum
Tutku ÇAKIR
2/17/2016 9:28:31 AM

Hocam ellerinize sağlık.

hikmet okumuş makale yorum
Cihan Coskun
4/12/2016 12:30:26 PM

Accessteki bir tabloya excelden kayıt ekleticem. Ancak accesste 5 alan olup excelde 7 alan varsa istediğim alanlardaki kayıtları ekletmeyecem. Bunu nasıl yapabilirim?

hikmet okumuş makale yorum
Hikmet Okumuş
4/12/2016 8:08:38 PM

Merhaba Cihan Coskun,

Excel' den bilgileri bir DataTable içerisine eklediğini varsayıyorum. 1. yöntem olarak kolon başlıkları üzerinden filtre yapabilirsin. Şöyle; excelde 1. satır kolon başlıklarını ifade etsin. DataTable içerisinde dönerken row için column name belirttiğinde ilgili değere ulaşabilirsin. Örnek;

var ad = dataTable.Rows[0]["Ad"].ToString();

2. yöntem olarak column name bilgisi yerine excelde bulunan sutunların indexlerini kullanabilirsin. Row için column index belirterek sadece ilgili kolonlar için işlem yapar, fazla olan kolonları dikkate almazsın. Örnek;

var ad = dataTable.Rows[0][1].ToString();

hikmet okumuş makale yorum
ayşe
4/27/2016 8:10:28 PM

c#' da veri sorgulama nedir acil yardım edebilirmisiniz acil

hikmet okumuş makale yorum
Hikmet Okumuş
4/27/2016 9:29:35 PM

Merhaba Ayşe,

Veritabanı sorgulaması ile ilgili aşağıdaki dökümanı inceleyebilirsin. Sana fikir verecektir.

http://megep.meb.gov.tr/mte_program_modul/moduller_pdf/Veritaban%C4%B1nda%20Sorgular.pdf

hikmet okumuş makale yorum
erkan kılıç
7/13/2017 12:43:33 AM

büyüyünce bende senin gibi olmak istiyorum :)



Yorum Ekle