ADO.NET ConnectedMimari
ActiveX Data Objects.NET ADO.NET
ADO.NET Connected Mimari
ADO.NET Nedir ? : Veri tabanımız ile bağlantı kura bildiğimiz bir köprüdür. Veri tabanımız da güncelleme , listeleme ,ekleme ,silme işlemleri yapa biliriz. ADO.NET ile SQL sorguları, komutlarını uygulama tarafımızda kullanabiliriz.
NOT : ACCESS, ORACLE içinde kullana biliyoruz.
SqlConnection : Veri Tabanına Bağlana Biliyoruz.
SqlCommand : Bu sınıf SQL server üzerinde çalışacak komutlar veya Stored Procedure’ler için ilgili komut deyimlerini tutabilir.
SqlDataReader : SqlDataReader ile veritabanından veri döndürülmesi sağlanır. Bu sınıfta veri okunma işlemi sürekli ileri yönlüdür, geri yönlü değildir.
Ado.NET |
private void btnKaydet_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("Server=.;Database=Northwind;Trusted_Connection=True");
//SQL taraflı olarak bir sorgu çalıştırmak istersek referans alacağımız nesne "SqlCommand"dır. Bu SQL Management Studio'daki New Query ekranı gibidir. Tüm sorguları buraya yazarız.
SqlCommand cmd = new SqlCommand("INSERT INTO Shippers(CompanyName,Phone) VALUES(@Ad,@Tel)", conn);
//Eğer sorguda bir parametre olucaksa bu parametrelerin karşılığı gelen değerleri "cmd.Parameters.AddWithValue " property sinden verebiliriz.
cmd.Parameters.AddWithValue("@Ad", txtKargoAdi.Text);
cmd.Parameters.AddWithValue("@Tel", txtTelefon.Text);
conn.Open();
int etkilenenSatirSayisi = cmd.ExecuteNonQuery();
conn.Close();
if (etkilenenSatirSayisi > 0)
{
MessageBox.Show("Başarıyla Eklendi");
}
else
{
MessageBox.Show("Hata Oluştu!");
}
//Bağlantı Oluşturduk
SqlConnection conn = new SqlConnection("Server=.;Database=Northwind;uid=sa;pwd=123");
//Sql Komutu (Query) yazacağımız için SqlCommand nesnesini türettik.
SqlCommand cmd = new SqlCommand();
//Aldığımız cmd adındaki SqlCommand nesnine yukarıda tanımladığımız bağlantıyı verdik.
cmd.Connection = conn;
//Bağlantıyı da verdiğimiz Komutu yani Query'yi yazdık.
cmd.CommandText = "UPDATE Shippers SET CompanyName = @Ad,Phone = @Tel WHERE ShipperID = 10";
//Varolan Parametrelere karşılık gelen değerleri verdik.
cmd.Parameters.AddWithValue("@Ad", txtKargoAdi.Text);
cmd.Parameters.AddWithValue("@Tel", txtTelefon.Text);
//Execute edileceği için bağlantıyı açtık.
if (conn.State == ConnectionState.Closed) conn.Open();
try//Bağlantıda herhangi bir hata çıkması durumunu try-catch ile kontrol ettik.
{
//Execute edip kaç satır etkilendiğini "etkilenen" adındaki değişkene verdik.
int etkilenen = cmd.ExecuteNonQuery();
//"etkilenen" değişkenine gelen satır sayısına göre eklendi veya eklenmedi kontrolü yapıp msj verdik..
MessageBox.Show(etkilenen > 0 ? "Başarıyla Eklendi!" : "HATA OLUŞTU!");
}
catch (Exception ex)//Execute anında hata alırsak bu catch bloguna düşer. Burada yapılması gereken hatanın ne olduğunu ekrana yazdırmak.
{
MessageBox.Show("HATA OLUŞTU!\nHata Mesajı : " + ex.Message);
}
finally
{
//Bağlantıyı kapattık.
if (conn.State == ConnectionState.Open) conn.Close();
//Bağlantıyı ram'dan ve projeden tümüyle yok eder.
conn.Dispose();
}
}
private void btnSil_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("Server=.;Database=Northwind;uid=sa;pwd=123");
SqlCommand cmd = new SqlCommand("DELETE FROM Shippers WHERE ShipperID=10", conn);
conn.Open();
int etkilenen = cmd.ExecuteNonQuery();
conn.Close();
MessageBox.Show(etkilenen > 0 ? "Silindi!" : "HATA OLUŞTU!");
}
private void Form2_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("Server=.;Database=Northwind;uid=sa;pwd=123");
SqlCommand cmd = new SqlCommand("SELECT CompanyName,Phone FROM Shippers",conn);
try
{
//Okuyucudan önce veritabanına bağlanacağım için tanımladığım bağlantıyı açmam gerekir.
if (conn.State == ConnectionState.Closed) conn.Open();
//SqlDataReader => En hızlı veri okuma teknolojisine sahip nesnedir. Sadece ileri doğru okuma yaopabilir. Okuma tekniği ise, satır satır değil, kolon kolon'dur(Hücre,hücre).
SqlDataReader okuyucu = cmd.ExecuteReader();
//Eğer "okuyucu" üzerinde kayıt varsa, okuma işlemi gerçekleştirilir.
if (okuyucu.HasRows)
{
//SqlDataReader ile veri okurken genel olarak kullanılan döngü WHILE döngüsüdür. Tek bir koşula dayalı bir döngü olduğundan okuyucuda veri olduğu sürece döner.
while (okuyucu.Read())
{
//DataReader üzerinden veri çekerken, vermiş olduğmuz kolon index numaraları SQL'deli kolon sıralamaları değil, sorgunuzdaki kolon sıralamalarıdır.
//bizim sorgumuzdaki sıralam aşağıdaki gibidir.
//Select CompanyName, Phone From Shippers => CompanyName => 0, Phone => 1
//1.YOL (GET METOTLARI) => Eğer veritabanından gelen kolonun veri tipinden eminseniz get metotlarını kullanarak, "boxing-unboxing" işlemlerinden arınmış bir şekilde verilere erişebilirsiniz. Eğer bu şekilde olmasaydı veri geldiğinde Convert veya Cast işlemi yapmamız gerekirdi.
lstKargolar.Items.Add(okuyucu.GetString(0) + " - " + okuyucu.GetString(1));
//2.YOL (Koleksiyon Mantığı) => Kolon Adını vererek verilerinizi çekme imkanına sahip olursunu. Avantajı, sorgunuza kolon ekleseniz bile index mantığyla çalışmadığınız için burada bir deişiklik yapmanıza gerek kalmaz. Dezavantajı: bir unboxing işlemi yapmak zorunda kalırsınız çünkü veri "object" tipinde size teslim edilir.
//lstKargolar.Items.Add(okuyucu["CompanyName"].ToString());
//3.YOL (Koleksiyon Mantığı) => 2.Yolla mantığı yanıdır yine object tipinde veriyi getirir. Kolon adı yerine index verirsiniz.
//lstKargolar.Items.Add(okuyucu[0].ToString());
}
}
}
catch (Exception ex )
{
MessageBox.Show("HATA OLUŞTU => " + ex.Message);
}
finally
{
conn.Close();
conn.Dispose();
}
}
private void btnYenile_Click(object sender, EventArgs e)
{
lstKargolar.Items.Clear();
SqlConnection conn = new SqlConnection("Server=.;Database=Northwind;uid=sa;pwd=123");
SqlCommand cmd = new SqlCommand("SELECT CompanyName,Phone FROM Shippers", conn);
try
{
//Okuyucudan önce veritabanına bağlanacağım için tanımladığım bağlantıyı açmam gerekir.
if (conn.State == ConnectionState.Closed) conn.Open();
//SqlDataReader => En hızlı veri okuma teknolojisine sahip nesnedir. Sadece ileri doğru okuma yaopabilir. Okuma tekniği ise, satır satır değil, kolon kolon'dur(Hücre,hücre).
SqlDataReader okuyucu = cmd.ExecuteReader();
//Eğer "okuyucu" üzerinde kayıt varsa, okuma işlemi gerçekleştirilir.
if (okuyucu.HasRows)
{
//SqlDataReader ile veri okurken genel olarak kullanılan döngü WHILE döngüsüdür. Tek bir koşula dayalı bir döngü olduğundan okuyucuda veri olduğu sürece döner.
while (okuyucu.Read())
{
//DataReader üzerinden veri çekerken, vermiş olduğmuz kolon index numaraları SQL'deli kolon sıralamaları değil, sorgunuzdaki kolon sıralamalarıdır.
//bizim sorgumuzdaki sıralam aşağıdaki gibidir.
//Select CompanyName, Phone From Shippers => CompanyName => 0, Phone => 1
//1.YOL (GET METOTLARI) => Eğer veritabanından gelen kolonun veri tipinden eminseniz get metotlarını kullanarak, "boxing-unboxing" işlemlerinden arınmış bir şekilde verilere erişebilirsiniz. Eğer bu şekilde olmasaydı veri geldiğinde Convert veya Cast işlemi yapmamız gerekirdi.
lstKargolar.Items.Add(okuyucu.GetString(0) + " - " + okuyucu.GetString(1));
//2.YOL (Koleksiyon Mantığı) => Kolon Adını vererek verilerinizi çekme imkanına sahip olursunu. Avantajı, sorgunuza kolon ekleseniz bile index mantığyla çalışmadığınız için burada bir deişiklik yapmanıza gerek kalmaz. Dezavantajı: bir unboxing işlemi yapmak zorunda kalırsınız çünkü veri "object" tipinde size teslim edilir.
//lstKargolar.Items.Add(okuyucu["CompanyName"].ToString());
//3.YOL (Koleksiyon Mantığı) => 2.Yolla mantığı yanıdır yine object tipinde veriyi getirir. Kolon adı yerine index verirsiniz.
//lstKargolar.Items.Add(okuyucu[0].ToString());
}
}
}
catch (Exception ex)
{
MessageBox.Show("HATA OLUŞTU => " + ex.Message);
}
finally
{
conn.Close();
conn.Dispose();
}
}
}
}
Yorumlar
Yorum Gönder