VERİ ERİŞİMİ İÇİN ADO. Net’in C# İLE İNCELENMESİ ADO.NET ( Activex Data Object) Bir çok programlama dilinde arka planda çalışan ADO(Activex Data Object)dir.ADO.NET uygulamalarımızda veri kullanmamızı kolaylaştıran .Net Framework sınıf kütüphanelerindendir.ADO.NET baştanda belirttiğim gibi başka programlama dillerinde de kullanılması için Microsoft tarafından bütün database bağlantı uygulamalarının birbirleriyle entegrasyonunu yaparak nesneler şeklinde paketlenmiş halidir. ADO.NET içerisindeki sınıflar, altyapının ve veritabanına özgü karmaşık işlemlerin çoğunu yönetir.Böylece bu da yazılımcıların geliştirdikleri programlarda, veri okuma ve yazmada daha az kod kullanmaları yeterli olacaktır.ADO.NET bir dil değil sadece yaygın işlevselliği sağlayan bir sınıf derlemesidir. Arkadaşlar Ado.Net yapısını tüm veritabanlarına bağlantı ile ilişki kurmada kullabiliriz. Uygulama ve Database kullanımındaki nesneler; * C# SQl Server Connection * OLEDB Connection * ODBC Connection * Command * SqlCommand - ExecuteNonQuery * OleDbCommand - ExecuteNonQuery * SqlCommand - ExecuteScalar * OleDbCommand - ExecuteScalar * SqlCommand - ExecuteReader * OleDbCommand - ExecuteReader * DataReader * SqlDataReader * OleDbDataReader * Multiple Result Sets * Table Schema from SqlDataReader * Table Schema from OleDbDataReader * DataAdapter * SqlDataAdapter * OleDbDataAdapter
SQL Connection Arkadaşlar tanımlarla Ado.Net’i öğrenmek kolay değildir.Yazarken nesneleri ve terimler öğrenebiliriz.Ben bu yüzden tanım yapmadan kodlarımı yazacağım.Kodlar daha akıldı kalıcı olsun diye yanlarına kısa kısa yazacağım. Bağlantı kurmamız için öncelike namespace olarak “using System.Data.SqlClients” kullanmak zorundayız.Çünkü ADO.NET nesnelerimiz bu namespace referansından gelmektedir. Uygulamada SQL Managment stüdyodan bağlantı sağlamayı yaptığım bir uygulama ile gerçekleştireceğiz. ______________________________________________________
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;//Sql server a için kullanıalcak nesneler bu namespace altında
namespace AdoIntro { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void rbdSqlAuth_CheckedChanged(object sender, EventArgs e) { txtLogin.Enabled = txtPassword.Enabled = rbdSqlAuth.Checked; }
SqlConnection conn = null; private void btnBaglan_Click(object sender, EventArgs e) { //server=.;database=Northwind; string connStr = "server="+txtSunucu.Text+";database="+txtVeritabani.Text+";";
if (rdbWinAuth.Checked)//windows authentication ile doğrulanacak { //aşağıdakileri windows doğrulaması için yazılabilir //trusted_connection=true/SSPI connStr += "integrated security=true"; } else { connStr += "uId=" + txtLogin.Text + ";pwd=" + txtPassword.Text; }
conn = new SqlConnection(connStr);//SqlConnection uygulama le sql birbirine bağlayan nesne
try { conn.Open(); MessageBox.Show("Bağlantı kuruldu..."); } catch (Exception) { MessageBox.Show("Bağlantı kurulamadı..."); }
} } } ______________________________________________________
Yaptığımız programı kontrol edelim ki makaleyi okuyan arkadaşlar hem kontrolü görün hemde programın sağlamasını yapalım.Bunun için SQL server profiler’e girelim ve burdan file / new trace / run çalıştıralım.Bağlatımızı kurduğumuzda açılan trace’de program yapılanmısın ve login olduğunuzu belirtcektir.
SQL Command
Command nesnesi ADO.NET SQL ifadeleri ve veri kaynağı C # Bağlantı Nesnesi belirtilen karşı procedure ve içine yazdığımız T-SQL ifadeyi çalıştırır. Command Object SQL deyimlerini çalıştırmak için bir C# Bağlantı Nesne bir örneği gerektirir.Veri Kaynağı karşı bir SQL deyimi yürütmek için öncelikle bir Connection Nesnesi oluşturmalıyız.Command nesnesinin bağlantı özelliğine açık bağlantı belirlemektir. Sonra Command Object SQL deyimlerini çalıştırabilirsiniz. SQL deyiminin yürütülmesine sonra Command Object sonucu verecektir. DataReader kullanarak sorgudaki dataları alırız..Command Object Data Source karşı yürütülür komut temsil eden bir dize değeri içeren bir özellik CommandText’e sahiptir. CommandType StoredProcedure olarak ayarlandığında, sproc yazmalıyız ve sproc’un adını Text’e vermeyliz. Ben ilk örneğimde direk command’a yazdık sorgumuzu. ______________________________________________________ SqlConnection conn = new SqlConnection("server=.;database=Northwind;integrated security=True");
void KategorileriGetir() { //çalıştırmak istediğimiz Komutu oluşturduk SqlCommand cmd = new SqlCommand("select CategoryName from Categories",conn); if (cmd.Connection.State == ConnectionState.Closed) cmd.Connection.Open();
//Komutu çalıştır ortalığı veri okuyucuya bırak SqlDataReader dr = cmd.ExecuteReader();//Komutu çalıştırmak için ExecuteReader.Sadece select sorgularda yazarız.
while (dr.Read())// reader okuma yaptığı sürece döngüyü sağla { // herbir dönüş bir satır okuduğu anlamına gelir string kategoriAdi = dr.GetString(0); lstPersoneller.Items.Add(kategoriAdi); } dr.Close(); cmd.Connection.Close();
}
private void Form1_Load(object sender, EventArgs e) { KategorileriGetir(); } } ______________________________________________________
Programımızda ListBox’a Northwind databasindeki Categories tablosundaki dataları alıyoruz. ExecuteReader C # SqlCommand Nesnesi Connection Nesnesi için SQL deyimlerini gönderir ve SqlDataReader Nesnesine SQL deyimlerini taşır. SqlCommand Nesnesi içinde ExecuteReader yöntemi SqlClient.SqlDataReader objectsinin instance olacaktır. SqlDataReader Nesne bir nesne tabanlı, veri okuyucudur.Veri ekleme, güncelleme silme işlemlerini DataReader ile yapamayız.
DataReader ile databaseimizdeki verileri teker teker alır ve uygulamaya getirir.Read only, Forward Only deriz her zaman okuma ve ileri doğru okumadır. Arkadaşlar bugüne kadar makale niteliğinde pek fazla bir şey yazmadım.Bunu en kısa zamanda diğer makaleleri standart bir hale getirip yazacağım. Sıradaki Konu: C# ExecuteNonQuery C# ExecuteScalar DataAdapter
Görüşmek üzere, Saygılarıma... Yusuf KARAOĞLAN yusufkaraoglan@gmail.com yusufkaraoglan.com