VB.net ile SQL Veritabani islemleri – 2 (SqlCommand/Tablodan Veri çekme)

Bundan önceki dersimizde bir SQL veritabanina SqlConnection nesnesi ile nasil baglanti yapacagimizi ögrenmistik. Bu dersimizde ise SqlCommand nesnesine göz atacagiz.
 

Visual Basic.Net’te SqlCommand nesnesi nedir ve ne ise yarar, nasil kullanilir, aldigi parametreler nelerdir? Bunlara tek tek yüzeysel olarak deginelim.

SqlCommand aslinda bir çesit Sql komutudur; SELECT CustomerID From Customers gibi.
Bildigimiz Sql komutu ne ise yariyorsa SqlCommand da ayni ise yarar. Yani veritabanindaki kayitlari göstermek, silmek, güncelleme ve veritabanina yeni kayit girme islemlerinde kullanilir.
 
ilk etapta SqlCommand nesnesinin çok kullanilan bazi özelliklerini (properties) ve metotlarini ele almak istiyorum.
Bunlar:
Connection: Bu özellik SqlCommand nesnemizi diledigimiz veritabanina baglanmamizi saglar.
Örnek:
.
Dim strBaglanti As String = "Data Source=AHMET-PC\SQLSERVER;Initial Catalog=D:\NORTHWND.MDF;Integrated Security=True"
Dim CN As New SqlConnection(strBaglanti)
Dim CMD As New SqlCommand
CMD.Connection = CN

 
Geçen dersimizde de yaptigimiz gibi bir baglanti String’i ve bir baglanti (connection) olusturduk. Baglanti String’imizi SqlConnection nesnesine parametre olarak verdik.
Son olarak yaptigimiz ise bir SqlCommand nesnesi olusturup connection özelligini az önce olusturdugumuz SqlConnection (CN) nesnesine bagladik.
Yani, elimizde bir veritabani (database), bu veritabani ile iletisim kurmamizi saglayacak bir baglanti ve veritabanina komut verecek bir nesnemiz var. Dikkat edin henüz hiç bir komut vermedik!

 
CommandType :
Kullanilacak Sql komutunun (cümlesinin) tipini belirler.
Bunlar
Text, StoredProcedure, TableDirect seklinde olabilir.

 
CommandText: Bu özellik yardimiyla SqlCommand nesnemiz ile veritabanina ne komut verecegimizi belirleriz.
CommandType özelligi gözönünde bulundurularak sql cümlesi, stored procedure veya dogrudan tablo ismi yazilir.
Örnek:
CMD.CommandType = CommandType.Text
CMD.CommandText = "SELECT * FROM Customers"

 
Text yerine TableDirect yazsaydik CMD.CommandText = “table ismi”;StoredProcedure yazsaydik daha önceden olusturdugumuz StoredProcedure ismini kullanacaktik.
StoredProcedure konusunda daha ayrintili bilgiye buradan ulasabilirsiniz.
SqlCommand nesnesinin söz dizilimi (syntax) yeni baslayanlar için biraz kafa karistirici olabiliyor. O yüzden söyle bir özet yapmak istiyorum. SqlCommand nesnesini 3 farkli söz dizilimi ile fakat ayni sonucu verecek sekilde yazalim:

 
Birinci sekil:
Dim strBaglanti As String = "Data Source=AHMET-PC\SQLSERVER;Initial Catalog=D:\NORTHWND.MDF;Integrated Security=True"
Dim CN As New SqlConnection(strBaglanti)
Dim CMD As New SqlCommand
CMD.Connection = CN
Dim strQ As String = "SELECT * FROM Customers"
CMD.CommandType = CommandType.Text
CMD.CommandText = strQ

 
ikinci sekil:
 
Dim strQ As String = "SELECT * FROM Customers"
Dim CMD As New SqlCommand(strQ)
CMD.Connection = CN
 
 
üçüncü sekil:
 
Dim strQ As String = "SELECT * FROM Customers"
Dim CMD As New SqlCommand(strQ, CN)
 
 
ikinci ve üçüncü yöntemlere baktigimizada .CommandType metodunu kullanmadan, sql komutumuzu dogrudan .Text seklinde kullandigimizi görürüz. Hata vermeyecektir, çünkü SqlCommand nesnesinin öntanimli metodu zaten .Text’tir.
Velhasil hepsi de ayni sonucu verir.

 
Simdi, elimizde SQL veritabanina bir baglanti (SqlConnection) ve bu veritabaninda islem yapabilecegimiz bir komut nesnemiz (SqlCommand) var. Sira birseyler yapmaya geldi.

.
ExecuteReader()
Uygulamalarimizda bazen veri kaynaklarindan veri kümeleri çekmemiz gerekir. Böyle bir durumda, ExecuteReader metodunu kullanabiliriz. ExecuteReader metodu, çalistirilan komut sonucu elde edilen sonuç kümesinden bir SqlDataReader nesnesi için veri akisini saglar.
Hemen basit bir uygulama yapalim.

 
Dim strQ As String = "SELECT * FROM Customers WHERE CustomerID=’ALFKI’"
Dim CMD As New SqlCommand(strQ, CN)
CN.Open()
Dim Reader As SqlDataReader = CMD.ExecuteReader()
Dim sonuc As String = String.Empty
Do While Reader.Read
MessageBox.Show(Reader(1).ToString & “ “ & Reader(2).ToString) ‘ikinci ve üçüncü kolondaki bilgiler
Loop
CN.Close()

 
Sonuç olarak Customers tablosunda CustomerID’si ALFKI olan kayitlarin ikinci kolonundaki bilgiler dönecektir.

 
ExecuteNonQuery()
Bu metot bize, SqlCommand ile verdigimiz komuttan etkilenen kayitlarin adedini verir. Sonuç integer tipindedir.

 
Dim strQ AsString = "update Customers set Country =’Mexico’ where Country =’Mexico…’"
Dim CMD As New SqlCommand(strQ, CN)
CN.Open()
Dim Toplam As Integer = CMD.ExecuteNonQuery
MessageBox.Show("Toplam etilenen kayit sayisi: " & Toplam)
CN.Close()
Nasil kullanabiliriz bunu, örnegin "Toplam … adet kayit güncellendi" seklinde bir bilgi mesaji verebiliriz; ya da dönen deger ‘0’ ise "güncelleme basarisiz" gibi…

 
ExecuteScalar()
ExecuteReader() metodundan bahsederken sonuç kümesi ibaresini kullanmistik. ExecuteScalar() tek alanlik veri döndüren sql komutlari için kullanilir. Bu yüzden ExecuteReader() ‘den daha performanslidir.

 
Dim strQ As String = "Select COUNT(ContactName) from Customers"
Dim CMD As New SqlCommand(strQ, CN)
CN.Open()
Dim ToplamKayit As Integer = CMD.ExecuteScalar
MessageBox.Show("Toplam kayit: " & ToplamKayit)
CN.Close()

 
SqlCommand nesnesi elbette bunlarla sinirli degil. Bundan sonraki derslerimizde de bahsinin geçecegi muhakkak.
Insallah bir sonraki dersimizde SqlDataAdapter nesnesini ele alacagiz.

12 thoughts on “VB.net ile SQL Veritabani islemleri – 2 (SqlCommand/Tablodan Veri çekme)

  1.  ExecuteReader ile tek bir tablodan veri çekiyorum.Ya birden fazla tablodan veri çekmek istersem ne yapmam gerekir ?

    mesela textbox1 e tabloda 1 den veri çekecegim textbox2ye de tablo 2 den veri çekecegim. 

  2. ÖZGE

    29 Nisan 2010 09:20

    Özge Web Programlamada  bazi dillerde( asp,php ) dim degisken tanimlamada kullanilir hatta javascipt’te var ile tanimlanir  ayrica webde oldugu gibi local programlamadada durum cogunlukla aynidir java dillerinde var ile ötekilerde istisnalar hariç dim ile bir degisken atanir

    ör ;

    <%
    Dim ozgeyas as integer
    Dim ozgesehir as String
    ozgeyas = 25
    ozgesehir = "Istanbul"

    %>
    yukarida integer (yani sayisal) degere sahip degiskeni rakam olarak kullandi

    string degerli degiskeni ise oldugu gibi yazi olarak yansitti

     

    daha açiklayici olsun diye birde dim as in

  3. dimdegiskenadi as  integer  degiskenin sayisal deger içerdigini gösterir string olsa hata verir örnegin.

     

    bu arada dim komutu degisken tanimlamada kullanilir

     

    hee bide sen programci olduguna eminmisin:)

  4. iste onu için pc adi yerine nokta kullan diyorum 🙂 karakter olarak nokta (.)

    nokta (.) karakteri o anda programin calistigi makina demektir kardes. 

  5. gezgin tmm orayi anladim kendi pcmin adina gore ayarlicam projenin setupunu okulda cikardigimda baglnti cumlesinde dogal olarak bnm pcnin adi yazicak ve calismcak onu anlatmak istiyorum

  6.  Data Source=AHMET-PC\SQLSERVER kismindaki ahmet-pc\sqlserver kismini kendi bilgisayarina göre duzelteceksin kardes. eger sql lokalde ise bilgisayar ismi yerine nokta (.) kullanarabilirsin. Örnegin .\SQLEXPRESS gibi

    eger sql i default instance olarak kurdu isen sadece pc adini yazman yeterli pc adi yerine yine nokta kullanabilirsin.

  7. bu baglanti cumlesi sadece ahmetpc yerel disk d  de calisir baska pclerde calismaz yardim plsssss

  8. Daha açik konusursaniz sevinirim çünkü ben de sizi anlayamiyorum. Kodlarin yaziminda mi, programin mantiginda mi hata var? Daha okunakli olsun diye bazi kelimeleri renkli yazmayi tercih ediyorum, bu esnada bazi yazim hatalari yapmis olabilirim.

  9. çok sasirdim ne demek istiyorsunuz hiç anlayamiyorum bir programci olarak kapiyi bile kodlarla acarken burdaki kodlari tanimlayamadim dim as ? integer

HakkiX için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir