Anda di halaman 1dari 14

2011

ADO.NET – Ders Notları

Fatmagül İBİŞOĞLU

BilgeAdam Bilgi Teknolojileri Akademisi


Yazılım ve Veritabanı Uzmanlığı Eğitimi
Hafta İçi Sabah Grubu – E Sınıfı

17/01/2011
İÇİNDEKİLER

Sayfa

1.ADO.NET 3

1.1. Veritabanı Uygulamaları Geliştirmek 3

1.2. Veritabanına Bağlanma Tipleri 4

1.3. T-SQL Sonuçları ve SqlCommand Tipleri 5

2.ADO.NET UYGULAMALARI 6

2.1. SQL Connection 6

2.1.1. Form Tasarımı 6

2.1.2. Kodlama 7

2.2. SQL Command 8

2.2.1. Form Tasarımı 8

2.2.2. Kodlama 10

KAYNAK 11

2
1. ADO.NET

1.1. Veritabanı Uygulamaları Geliştirebilmek

Şu ana kadar yaptığımız programlarda kullanıcı arayüzü oluşturmayı ve


tetikleyicileri gördük. Dikkat edildiyse kodlar dışında girmiş olduğunuz tüm
bilgiler programı kapatıp tekrar başlattığınız zaman kaybolmaktadır.
Bilgisayar dillerinin tümünde kendi dosyalama yöntemleri mevcut olmakla
birlikte hiçbir dosyalama yöntemi veritabanı güvenliğine ve üstünlüğüne
ulaşamamaktadır. C#’ta veritabanı işlemleri ADO.NET1 teknolojisiyle
gerçekleştirilmektedir (Bkz. Şekil 1.1).

Şekil 1.1. ADO.NET işlevini gösteren bir diyagram

Örneklerimizde SQL Server veritabanı kullanarak işlemlerimizi


gerçekleştireceğiz. Veritabanı bağlantısını ToolBox penceresinde bulunan Data
Component tabındaki kontrollerle ya da kod yazarak sağlayacağız.

1
ADO: ActiveX Data Object

3
SQL’e yapılan bağlantılar dosyanın bulunduğu path (adres) ile olacaktır.
Programınızda bir SQL bağlantısı gerçekleştirecekseniz:
using System.Data.SqlClient;
kütüphanesini eklemelisiniz. Aksi takdirde yazdığınız kodlar çalışmayacaktır.
Component paletinde bulunan kontrollerin özelliklerinden bazılarının ne
işe yaradığı aşağıda açıklanmaktadır.
SqlConnection: SQL Server makinesine bağlanılacaksa bağlantı bu
kontrol sayesinde gerçekleştirilebilir.
SqlCommand: SQL Server makinesindeki tablolara komut göndermek
(ilişki yaratmak için vs.) kullanılır.
Windows Forms üzerinde veritabanıyla işlem yapabilmek için izlenmesi
gereken adımlar aşağıdaki şekilde sıralanabilmektedir:
1. Hedef veritabanına bağlantı kurulması;
2. Kurulan bağlantının açılması;
3. Yürütülmesi gereken T-SQl komutunun çalıştırılması;
4. İşlemden sonra dönen sonucun alınması ve sonuca göre hareket
edilmesi;
5. İşlemler bittikten sonra bağlantının kapatılması.

1.2. Veritabanına Bağlanma Tipleri

ADO.NET’ten veritabanına iki farklı bağlanma tipi vardır. Bunlar aşağıda


belirtilmektedir.
1. Windows Authentication
2. SQL Server Authentication
Bu bağlantı tipleri Windows Forms içerisine sırasıyla aşağıdaki şekilde
kodlanmaktadır.
1. "Server={Server Adresi};Database={Database Adı};Integrated
Security=true"
2. “Server={Server Adresi};Database={Database Adı}; UserID =
{Kullanıcı Adı};Password={Şifre}”

4
1.3. T-SQL Sonuçları ve SqlCommand Tipleri

SQL Server’a bağlandıktan sonra sıra hedef veritabanına komut


göndermeye gelmektedir. Gönderilen komutların ne tipte derleneceği (execute) üç
farklı şekilde belirlenebilmektedir (Bkz. Şekil 1.2). Bunlar sırasıyla.
.ExecuteNonQuery(), .ExecuteScalar() ve .ExecuteReader() olarak bilinmektedir.

T-SQL Sonuçları

(Execute)

Rows Effected

 Insert Scalar Table


 Update
 Delete

.ExecuteNonQuery( ) .ExecuteScalar( ) .ExecuteReader( )

Şekil 1.2. SqlCommand Tipleri

.ExecuteNonQuery(), T-SQL’de ekle, güncelle ve sil (insert, update,


delete) komutlarının derlenmesi sonucunda alınan Rows Effected bildirimi ile
ilgilidir. Hatırlanacağı üzere, Rows Effected bize komuttan etkilenen satır sayısını
vermektedir. Eğer biz komuttan etkilenen bu satır sayısı ile ilgileniyorsak
SqlCommand tipindeki değişkenimizi. ExecuteNonQuery() metodu ile
kullanacağızdır.

5
.ExecuteScalar(), T-SQL’de Select Count({Sütun Adı}) From {Tablo Adı}
vb. gibi yazılan bir komudun derlenmesi sonucunda dönecek birim veri (örneğin,
isim, fiyat, yaş, … ) için kullanılmaktadır. Değişik tiplerde sonuç verdiğinden
dolayı object tipindedir.
.ExecuteReader(), Select {Sütun Adı1},{Sütun Adı2}, … From {Tablo
Adı} gibi bir T-SQL komutunun derlenmesi sonucu elde edilecek tablo için
kullanılmaktadır.

2. ADO.NET UYGULAMALARI

2.1. SQL Connection

Bu uygulamada Windows Forms üzerinden SQL Serverdaki hedef


veritabanına nasıl bağlantı kurulduğu gösterilmektedir. Ayrıca, bağlantı
kurulduktan ve istenen T-SQL komutu derlendikten sonra bu bağlantının
kapatılması gerekmektedir. Nasıl ki; cep telefonumuz ile aramak istediğimiz
kişinin numarasını telefon rehberinden bulduktan sonra telefonun ara tuşuna
basıyor ve gerekli görüşmeyi yaptıktan sonra gereksiz fatura masrafının önüne
geçmek için kapat düğmesine basarak bağlantıyı sonlandırıyorsak, veritabanına
kuracağımız bağlantıyı açtıktan ve gerekli işlemleri yürüttükten sonra bağlantıyı
kapatmamız gerekmektedir. Aksi durumda, veritabanı perfomansında aksaklıklar
meydana gelecektir.

2.1.1. Form Tasarımı

Uygulamaya bir adet form eklenip; formun üzerine iki adet buton kontrolü
yerleştirilsin (Bkz. Şekil 2.1). Bu butonlardan ilkinin text özelliğine “Bağlan”,
ikincisinin text özelliğine ise “Bağlantıyı Kapat” yazılsın. Bu tasarım veritabanı
bağlantısını açıp kapatmanın nasıl gerçekleştiğini gözlemlemek için yeterlidir.

6
Şekil 2.1. Veritabanına bağlantı açma ve kapatma için form tasarımı

2.1.2. Kodlama

Bu uygulama için yazılacak kod kümesi aşağıda gösterilmektedir. Her iki


button kontrolü için kullanacağımız veritabanı bağlantısı ortak olduğu için
SqlConnection tipindeki değişken global tanımlanmıştır. Ayrıca bağlantıyı
kurmak istediğimiz hedef veritabanının adı “StokTakip” olarak belirlenmiştir.

SqlConnection conn =
new SqlConnection("Server=.;Database=StokTakip;Integrated
Security=true");

private void button1_Click(object sender, EventArgs e)


{
if (conn.State == ConnectionState.Closed)
conn.Open();
else
MessageBox.Show("Zaten Açık!");
}

private void button2_Click(object sender, EventArgs e)


{
if (conn.State == ConnectionState.Open)
conn.Close();
else
MessageBox.Show("Zaten Kapalı!");
}

7
2.2. SQL Command

2.2.1. Form Tasarımı

a. Kullanıcılar Tablosu İçin Ekle Formu

Ekleme işleminin yürütüldüğü form tasarımında kullanılan kontroller


label, textBox ve numericUpDown ile sınırlıdır (Bkz. Şekil 2.2). Bu formdan
alınacak parametreler sırasıyla Ad, Soyad, Email, Şifre ve Yaş olacaktır. Yaş
parametresinin 18’den küçük olmaması istenmektedir. Bu kısıtı sağlamak için
numericUpDown kontrolü kullanılmaktadır.

Şekil 2.2. StokTakip veritabanı, Kullanıcılar tablosu için "Ekle" formu

b. Kullanıcılar Tablosu İçin Güncelle Formu

Güncelleme işleminin yürütüldüğü form tasarımında kullanılan kontroller


label, textBox ve numericUpDown ile sınırlı olup Ekle komutunun yürütüldüğü
form tasarımı ile aynıdır (Bkz. Şekil 2.3). Bu formda güncellenecek parametreler
sırasıyla Ad, Soyad, Email, Şifre ve Yaş olacaktır.

8
Şekil 2.3. StokTakip veritabanı, Kullanıcılar tablosu için "Güncelle" formu

c. Kullanıcılar Tablosu İçin Sil Formu

Sil işleminin yürütüldüğü form tasarımında kullanılan kontroller label ve


textBox ile sınırlıdır (Bkz. Şekil 2.4). Bu formdan alınacak parametre ise ID
olacaktır.

Şekil 2.4. StokTakip veritabanı, Kullanıcılar tablosu için “Sil” formu

9
2.2.2. Kodlama

a. Kullanıcılar Tablosu İçin Ekle Komutu

SqlCommand'ın ExecuteNonQuery metodu ile Insert, Update ve Delete


komutlarını yürütmek mümkündür. ExecuteNonQuery geriye etkilenen satır
sayısını getirmektedir. Aşağıdaki kodları dikkatle inceleyin. Ayrıca, kodları
kendiniz yazarken “using System.Data.SqlClient” kütüphanesini eklemeyi
unutmayın.

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 Sample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs


e)
{
SqlConnection conn = new
SqlConnection("Server=.;Database=StokTakip;Integrated
Security=true");
SqlCommand comm = new SqlCommand("Insert Into
Kullanicilar Values(@Ad,@Soyad,@Email,@Sifre,@Yas)", conn);

comm.Parameters.AddWithValue("@Ad", txtAd.Text);
comm.Parameters.AddWithValue("@Soyad",
txtSoyad.Text);

10
comm.Parameters.AddWithValue("@Email",
txtEmail.Text);
comm.Parameters.AddWithValue("@Sifre",
txtSifre.Text);
comm.Parameters.AddWithValue("@Yas",
numericUpDown1.Value);

conn.Open();
int EtkilenenSatirSayisi =
comm.ExecuteNonQuery();
conn.Close();

if (EtkilenenSatirSayisi > 0)
MessageBox.Show("Kayıt yapıldı.");
else
MessageBox.Show("Bir hata var!");

}
}
}

a. Kullanıcılar Tablosu İçin Güncelle Komutu

SqlCommand'ın ExecuteNonQuery metodu ile Insert, Update ve Delete


komutlarını yürütmek mümkündür. ExecuteNonQuery geriye etkilenen satır
sayısını getirmektedir. Aşağıdaki kodları dikkatle inceleyin. Ayrıca, kodları
kendiniz yazarken “using System.Data.SqlClient” kütüphanesini eklemeyi
unutmayın.

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 Sample
{

11
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs
e)
{
SqlConnection conn = new
SqlConnection("Server=.;Database=StokTakip;Integrated
Security=true");
SqlCommand comm = new SqlCommand("Update
Kullanicilar Set
Ad=@Ad,Soyad=@Soyad,Email=@Email,Sifre=@Sifre,Yas=@Yas Where
KullaniciID=@ID", conn);
comm.Parameters.AddWithValue("@Ad", txtAd.Text);
comm.Parameters.AddWithValue("@Soyad",
txtSoyad.Text);
comm.Parameters.AddWithValue("@Email",
txtEmail.Text);
comm.Parameters.AddWithValue("@Sifre",
txtSifre.Text);
comm.Parameters.AddWithValue("@Yas",
numericUpDown1.Value);
comm.Parameters.AddWithValue("@ID",
textBox1.Text);
conn.Open();
int EtkilenenSatirSayisi =
comm.ExecuteNonQuery();
conn.Close();
if (EtkilenenSatirSayisi > 0)
MessageBox.Show("Kayıt yapıldı.");
else
MessageBox.Show("Bir hata var!");
}
private void Form2_Load(object sender, EventArgs e)
{
}
}
}

12
c. Kullanıcılar Tablosu İçin Sil Komutu

SqlCommand'ın ExecuteNonQuery metodu ile Insert, Update ve Delete


komutlarını yürütmek mümkündür. Aşağıdaki kodları dikkatle inceleyin. Ayrıca,
kodları kendiniz yazarken “using System.Data.SqlClient” kütüphanesini eklemeyi
unutmayın.

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 Sample
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SqlConnection conn = new
SqlConnection("Server=.;Database=StokTakip;Integrated
Security=true");
SqlCommand comm = new SqlCommand("Delete From
Kullanicilar Where KullaniciID=@ID", conn);
comm.Parameters.AddWithValue("@ID", textBox1.Text);
conn.Open();
int EtkilenenSatirSayisi = comm.ExecuteNonQuery();
conn.Close();
if (EtkilenenSatirSayisi > 0)
MessageBox.Show("Kayıt silindi.");
else
MessageBox.Show("Bir hata var!");
}
}}

13
KAYNAK

Bu rapordaki konu içeriğinin tamamını BilgeAdam Yazılım & Veritabanı


Uzmanlığı eğitiminin verildiği Hafta İçi Grubu E Sınıfında tutmuş olduğum ders
notları oluşturmaktadır.

14

Anda mungkin juga menyukai