C Sharp /Veri tabanı işlemleri C#'ta veri tabanı işlemleri System.Data isim alanındaki ve bu isim alanının altındaki alt isim alanlarındaki türlerle yapılır. System.Data isim alanına programcılar ADO.NET ismini vermişlerdir. Yani bir yerde ADO.NET duyarsanız aslında System.Data isim alanından bahsetmektedir. System.Data isim alanıyla veri tabanlarına iki şekilde erişilebilir. 1. MSSQL veri tabanlarına direkt erişim. 2. OLEDB (Object Linking And Embedding DataBase) protokolünü destekleyen veri tabanlarına OLEDB protokolü ile erişim. Bağlanacağınız veri tabanı MSSQL ise daha hızlı olması açısından birinci yöntemi seçmeniz tavsiye edilir. Ancak daha genel bir yol olduğundan bu bölümde ikinci yöntem üzerinde daha çok duracağız. Popüler tüm veri tabanları OLEDB protokolünü desteklemektedir. OLEDB protokolüyle MSSQL veri tabanlarına da erişebilirsiniz. Ayrıca OLEDB protokolüyle Access dosyalarına da bir veri tabanıymış gibi bağlanabilirsiniz. C Sharp /Veri tabanı işlemleri System.Data Veri tabanlarındaki verilerle çalışmak için gerekli temel türler bu isim alanındadır. Veri tabanlarına bağlanmak için gerekli türler bu isim alanında değildir. System.Data.OleDb OLEDB protokolünü destekleyen veri tabanlarına bağlanmak için gerekli türler barındırır. System.Data.SqlClient OLEDB kullanmadan direkt MSSQL veri tabanlarına bağlanmak için gerekli türler barındırır. System.Data.SqlTypes MSSQL veri tabanlarındaki veri türlerini içerir. Tabii ki veri tabanından veri çekerken veya veri tabanına veri kaydederken C#'a özgü veri türlerini (string, int, ...) kullanabiliriz. Ancak MSSQL'e özgü veri türlerini kullanmamız bize artı performans sağlar. Microsoft Access Veri tabanı oluşturma Not: 791 – 798 nolu sayfalara bakınız. Microsoft Access Veri tabanı oluşturma Access Veri Tabanına Erişim için kullanılabilecek veri tabanı nesneleri şunlardır; • OleDBConnection Nesnesi : Bağlantı açmak ve kapatmak için kullanılan nesnedir. • OleDBCommand Nesnesi : Veri Tabanı üzerinde SQL deyimlerini çalıştırmak için kullanılan nesnedir. Select, Insert, Update ve Delete gibi SQL deyimleri bu nesne üzerinde çalıştırılabilir. • OleDbDataAdapter : Connected ve Disconned (bağlantılı ve bağlantısız) özelliği ile veriler arasında köprü görevi görür. Veri tabanından çekilen veriyi DataSet’e aktarmak ya da DataSet’te güncellenmiş veriyi veritabanına aktarmada kullanılır. • DataReader: Veri Tabanından kayıt çekmek için kullanılır. Kayıtlar OleDBCommand nesnesinin ExecuteReader metodu ile DataReader’a aktarılır. Bu nesne çekilen veriler sırasıyla okunabilir. • DataSet:Veri tabanından bağlantısız olarak çalışan bir nesnedir. OleDbDataAdapter ile veri tabanından çekilen veriler DataSet içerisinde tablolar çeklinde saklanır. DataSet’ deki veriler üzerinde güncellemeler yapıldıktan sonra OleDbDataAdapter ile tekrar veri tabanına aktarılır. DataSet; DataTable, DataColumn, DataRow ve DataRelation nesnelerinden oluşur. C Sharp /Uygulama Form oluşturma C Sharp / Veri tabanına bağlanma Access 2010 ve sonrası veri tabanına erişim sağlamak için Ofis 2010 yada Microsoft Access Database Engine 2010 yüklü olması gerekir. using System.Data; using System.Data.OleDb; OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Application.StartupPath + "/sozluk.accdb"); OleDbCommand komut =new OleDbCommand(); string deger; Application.StartupPath : Programın çalıştığı klasör yolunu verir. OleDbConnection : Bağlantı açmak kapatmak için kullanılan nesnedir. OleDbCommand: Veri tabanı üzerinde SQL deyimleri çalıştırmak için kullanılan nesnedir. C Sharp / Veri tabanına bağlanma OLEDBCOMMAND : Veri Tabanı ile ilgili kullanılan sorguları çalıştırmak için kullanılır. Komutları çalıştırmak için 4 çeşit Execute metoduna sahiptir. • ExecuteReader : Yürütülen komut sonrasında geriye DataReader nesnesi döndürür. • ExecuteNonQuery: Ekleme, Silme ve Güncelleme gibi sorgulardan etkilenen satır sayısını geriye döndürür. • ExecuteScalar: Bu metod geriye tek bir değer döndüren sorgular için kullanılır. Bu değer kayıt sayısı, bir alanın değeri gibi değerler olabilir. • ExecuteXMLReader: Yürütülen komut sonrasında geriye XML Reader Nesnesi döndürülür. KULLANICI GİRİŞ FORMU KODU: private void btnTamam_Click(object sender, EventArgs e) { if (baglanti.State == ConnectionState.Closed) baglanti.Open(); komut = new OleDbCommand("select * from sifre where sifre='" + txtSifre.Text + "' ", baglanti); try { deger = komut.ExecuteScalar().ToString(); if (Convert.ToInt32(deger) == 1) { MessageBox.Show("Şifre doğru"); baglanti.Close(); this.Hide(); Form2 frm2 = new Form2(); frm2.Show(); }else { MessageBox.Show("Şifre yanlış"); baglanti.Close(); } } catch { MessageBox.Show("HATA OLUŞTU"); } } FORM2 LOAD KODU: private void Form2_Load(object sender, EventArgs e) { if ((baglantı.State == ConnectionState.Closed)) baglantı.Open(); komut = new OleDbCommand("select * from sozcukler ", baglantı); OleDbDataReader reader = komut.ExecuteReader(); reader.Read(); if (reader.HasRows) { txt_turkce.Text = reader["turkce"].ToString(); txt_ingilizce.Text = reader.GetString(1).ToString(); } adaptor.SelectCommand = new OleDbCommand("select ingilizce,turkce from sozcukler ", baglantı); adaptor.Fill(ds); dataGridView1.DataSource = ds.Tables[0]; komut = new OleDbCommand("Select Count(*) From sozcukler", baglantı); lblKayıtSayısı.Text = "Veritabanında " + (int)komut.ExecuteScalar() + " tane kelime var."; baglantı.Close(); } FORM2 KAYIT EKLEME KODU: private void btnEkle_Click(object sender, EventArgs e) { try { DataSet ds = new DataSet(); if (baglantı.State == ConnectionState.Closed) baglantı.Open(); ds.Clear(); OleDbCommand komut = new OleDbCommand("insert into sozcukler (ingilizce,turkce) Values ('" + txt_ingilizce.Text + "','" + txt_turkce.Text + "')", baglantı); komut.ExecuteNonQuery(); dataGridView1.Update(); baglantı.Close(); MessageBox.Show("Kayıt Eklendi!"); } catch (Exception ex){ MessageBox.Show(ex.Message); baglantı.Close();} } FORM2 KAYIT SİLME KODU: private void btnSil_Click(object sender, EventArgs e) { try { DataSet ds = new DataSet(); if (baglantı.State == ConnectionState.Closed) baglantı.Open(); ds.Clear(); OleDbCommand komut = new OleDbCommand("delete from sozcukler Where txt_ingilizce.Text + "'", baglantı); komut.ExecuteNonQuery(); dataGridView1.Update(); dataGridView1.Refresh(); baglantı.Close(); MessageBox.Show("Kayıt Silindi!"); } catch (Exception ex){ MessageBox.Show(ex.Message); baglantı.Close();} } ingilizce='" + FORM2 KAYIT GÜNCELLEME KODU: private void btnGuncelle_Click(object sender, EventArgs e) { try { DataSet ds = new DataSet(); if (baglantı.State == ConnectionState.Closed) baglantı.Open(); ds.Clear(); OleDbCommand komut txt_ingilizce.Text + = "', new OleDbCommand("update turkce='" + sozcukler txt_turkce.Text + "' txt_ingilizce.Text + "'", baglantı); komut.ExecuteNonQuery(); dataGridView1.Update(); baglantı.Close(); MessageBox.Show("Kayıt Güncellendi!"); } catch (Exception ex){ MessageBox.Show(ex.Message); baglantı.Close();} } set Where ingilizce='" ingilizce='" + + FORM2 dataGridView1 KODU: private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { int satirno; satirno = e.RowIndex; txt_ingilizce.Text = dataGridView1.Rows[satirno].Cells[0].Value.ToString(); txt_turkce.Text = dataGridView1.Rows[satirno].Cells[1].Value.ToString(); }