You need to enable JavaScript to run this app.

Skip to main content

.NET 2.0 ile Access Veritabanı İşlemleri

.NET 2.0 ile Access Veritabanı İşlemleri

Posting Freak
.NET 2.0 ile Access Veritabanı İşlemleri
.NET 2.0 ile Access üzerinde kaydet,düzelt,sil,bul ve listele gibi standart işlemlerin kod ile nasıl yapılıdığını anlatılıyor.


1.Adım : Veri Tabanını Oluşturun :

Access programını çalıştırıp yeni bir veri tabanı oluşturalım.
Hemen bu veri tabanında yeni bir tablo tasarlayalım.
Alan isimlerini kısa olması açısından 4 adetle sınırladım.
Alan isimleri :

ID : otomatik sayı
AdSoyad : Text (50 karakter)
Yas : sayı (uzun tamsayı)
KayıtTarihi : tarih (Genel tarih)

NOT : Alanlardan birini ID olarak belirlemeniz ve birincil anahtar olarak atamanız kullanım açısından oldukça kolaylık sağlar. İşinize yarasada yaramasa da bu alanı eklemeyi alışkanlık edinin.

Tablonuzu �Tablo1� adı ile kaydedin. Tabloyu kaydettikten sonra Access size �tanımlı birincil anahtar yok oluşturayım mı?� gibi basit bir soru soracak olursa buraya �Evet� deyin.

Veri tabanı dosya ismi olarak �vt1.mdb� belirleyin veritabanınızı istediğiniz bir yere kaydedin (kolaylık olması açısından direk �C:\vt1.mdb� kaydedin ).
Access ile olan işimiz bu kadar. Özet olarak ;

----------------------------------
Veritabanı ismi : �vt1.mdb�
Yolu : �C:\vt1.mdb�
Tablo ismi :�Tablo1�


2.Adım : Proje Oluşturun :
Yeni bir Visual Basic WindowsApplication projesi açın. Projenin adının bir önemi yok. Proje açılınca otomatik olarak bir tane form zaten geliyor ve bizim için yeterli (ismini �form1� olarak bırakıyorum). Formun tasarımın bu linkden bakarak aynen tasarlayın ve nesnelerin adını değiştirmeyin. Ben nesnelerin adını kolaylık olması açısından değiştirmedim.Butonları ve TextBoxları sırası ile yukarıdan aşağıya doğru oluşturun. Formda görünen liste ListView'dir.


2.Adım : Kodlarınızı Yazın:
Formunuzun kod kısmına geçerek kodları aşağıdaki kodlar ile değiştirin;

Public Class Form1

"Global değişkenler
Dim conStr As String
Dim ID As Integer

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

"baglantı stringini oluştur
conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\vt1.mdb;User Id=admin;Password=;"

"formun yüklendiğinde kayıtları listele
ListData()

"textbox3 de tarihi default yaz
TextBox3.Text = DateTime.Now.ToString()

"listview ve kolonları hazırla
ListView1.FullRowSelect = True
ListView1.View = View.Details

ListView1.Columns.Add("ID", 40)
ListView1.Columns.Add("Ad Soyad", 200)
ListView1.Columns.Add("Yaş", 50)
ListView1.Columns.Add("Kayıt Tarihi", 150)

"ID değerimiz başlangıçta sıfır
"listeview den kayıt seçtiğimizde(doubleclick ile) atama yapılacak
ID = 0

End Sub

"Kaydet işlemi
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

"connection nesnesi(form load da connectionstring alındı)
Dim conn As New System.Data.OleDb.OleDbConnection(conStr)
"işlem için command nesnesi
Dim comm As New System.Data.OleDb.OleDbCommand
"command nesnesine bağlantıyı bildir
comm.Connection = conn

"command nesnesinin komut türünü ata
comm.CommandType = CommandType.Text

"parametreler ile çalışmak zor gibi görünsede aslında
"modülerlik ve güvenlik gibi açılardan avantajlıdır.
"kayıt işlemi için parametreleri oluştur.
Dim prm(2) As System.Data.OleDb.OleDbParameter
prm(0) = New System.Data.OleDb.OleDbParameter("@AdSoyad", TextBox1.Text)
prm(1) = New System.Data.OleDb.OleDbParameter("@Yas", Convert.ToInt32(TextBox2.Text))
prm(2) = New System.Data.OleDb.OleDbParameter("@KayitTarihi", Convert.ToDateTime(TextBox3.Text))

'parametreleri command nesnesine ver
comm.Parameters.AddRange(prm)

"insert stringi parametleri kullanarak oluştur
comm.CommandText = "INSERT INTO Tablo1 (AdSoyad,Yas,KayitTarihi) VALUES(@AdSoyad,@Yas,@KayitTarihi)"

"connectionu aç
comm.Connection.Open()

"kayıt işlemini gerçekleştir.
Dim ret As Integer
"işlemden sonra geriye kaç kayıt satırı işlendiği döner
ret = comm.ExecuteNonQuery()

MessageBox.Show(ret.ToString() + " kayıt yapıldı...")

"connection u kapat
comm.Connection.Close()
comm.Dispose()
conn.Dispose()

"textleri temizle
TextBox1.Clear()
TextBox2.Clear()
"textbox3 de tarihi default yaz
TextBox3.Text = DateTime.Now.ToString()

"listeyi tazele
ListData()
End Sub

"Düzelt işlemi
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

"düzelt işleminde yalnızca command.text farklıdır,burada insert yerine update kullanılır
"ayrıca hangi kayıdın düzeltileceği ID aracılığı ile bildirilir(WHERE)

"connection nesnesi(form load da connectionstring alındı)
Dim conn As New System.Data.OleDb.OleDbConnection(conStr)
"işlem için command nesnesi
Dim comm As New System.Data.OleDb.OleDbCommand
"command nesnesine bağlantıyı bildir
comm.Connection = conn

"command nesnesinin komut türünü ata
comm.CommandType = CommandType.Text

"kayıt işlemi için parametreleri oluştur
Dim prm(3) As System.Data.OleDb.OleDbParameter
prm(0) = New System.Data.OleDb.OleDbParameter("@AdSoyad", TextBox1.Text)
prm(1) = New System.Data.OleDb.OleDbParameter("@Yas", Convert.ToInt32(TextBox2.Text))
prm(2) = New System.Data.OleDb.OleDbParameter("@KayitTarihi", Convert.ToDateTime(TextBox3.Text))
prm(3) = New System.Data.OleDb.OleDbParameter("@ID", ID)

'parametreleri command nesnesine ver
comm.Parameters.AddRange(prm)

"update stringi parametleri kullanarak oluştur
comm.CommandText = "UPDATE Tablo1 SET AdSoyad=@AdSoyad,Yas=@Yas,KayitTarihi=@KayitTarihi WHERE ID=@ID"

"connectionu aç
comm.Connection.Open()

"düzelt işlemini gerçekleştir.
Dim ret As Integer
"işlemden sonra geriye kayıt satır işlendiği döner
ret = comm.ExecuteNonQuery()

MessageBox.Show(ret.ToString() + " kayıt düzeltildi...")

"connection u kapat
comm.Connection.Close()
comm.Dispose()
conn.Dispose()

"textleri temizle
TextBox1.Clear()
TextBox2.Clear()
"textbox3 de tarihi default yaz
TextBox3.Text = DateTime.Now.ToString()

"listeyi tazele
ListData()

"odaklanılan ID temizle
ID = 0

End Sub

"sil işlemi
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

"sil işlemi için de aynı nesnelere ihtiyaç var
"parametre olarak da sadece hangi kayıt olduğunu bildirmemiz yeterli (WHERE)

"connection nesnesi(form load da connectionstring alındı)
Dim conn As New System.Data.OleDb.OleDbConnection(conStr)
"işlem için command nesnesi
Dim comm As New System.Data.OleDb.OleDbCommand
"command nesnesine bağlantıyı bildir
comm.Connection = conn

"command nesnesinin komut türünü ata
comm.CommandType = CommandType.Text

"sil işlemi için parametreleri oluştur
Dim prm(0) As System.Data.OleDb.OleDbParameter
prm(0) = New System.Data.OleDb.OleDbParameter("@ID", ID)

'parametreleri command nesnesine ver
comm.Parameters.AddRange(prm)

"delete stringi parametleri kullanarak oluştur
comm.CommandText = "DELETE FROM Tablo1 WHERE ID=@ID"

"connectionu aç
comm.Connection.Open()

"kayıt işlemini gerçekleştir.
Dim ret As Integer
"işlemden sonra geriye kayıt satır işlendiği döner
ret = comm.ExecuteNonQuery()

MessageBox.Show(ret.ToString() + " kayıt silindi...")

"connection u kapat
comm.Connection.Close()
comm.Dispose()
conn.Dispose()

"textleri temizle
TextBox1.Clear()
TextBox2.Clear()
"textbox3 de tarihi default yaz
TextBox3.Text = DateTime.Now.ToString()

"listeyi tazele
ListData()

"odaklanılan ID temizle
ID = 0

End Sub

"Listeleme işlemi
Private Sub ListData()

"listeleme için grid yerine listview kullandım, isteğe bağlı değiştirilebilir.


"listeyi temizle
ListView1.Items.Clear()

"connection nesnesi(form load da connectionstring alındı)
Dim conn As New System.Data.OleDb.OleDbConnection(conStr)
"işlem için command nesnesi
Dim comm As New System.Data.OleDb.OleDbCommand
"command nesnesine bağlantıyı bildir
comm.Connection = conn

"command nesnesinin komut türünü ata
comm.CommandType = CommandType.Text

"Tüm kayıtları sorgulayacak string
comm.CommandText = "SELECT *FROM Tablo1"

"connectionu aç
comm.Connection.Open()

"gelen kayıtları alacağımız datareader
Dim rd As System.Data.OleDb.OleDbDataReader

"kayıtları al
rd = comm.ExecuteReader(CommandBehavior.CloseConnection)

"datareader tüm kayıt satırlarını read() metodu ile okur ve bu method true döndürür(eğer kayıt varsa)
"bu yüzden while döngüsü en mantıklı olanı
"datareader ile bir satırı read() metodu ile okuduğunuzda önceki satırlara geri dönüş yoktur.
"bu yüzden reader hızlıda çalışır
While (rd.Read())
"listview içen item(satır) hazırla
Dim lst As New ListViewItem()

"rd.GetValue(x) methodu o an odaklandığımız satırdaki x. kolonda bulunan değeri döndürür
"ilk kolon için değer(ID)
lst.Text = rd.GetValue(0)
"2. kolon için değer
lst.SubItems.Add(rd.GetValue(1))
"3.kolon değer
lst.SubItems.Add(rd.GetValue(2))
"3.kolon değer
lst.SubItems.Add(rd.GetValue(3))

ListView1.Items.Add(lst)
End While

comm.Connection.Close()
conn.Dispose()
comm.Dispose()

End Sub

"bul işlemi
Private Sub ListView1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.DoubleClick

"seçilen kayıdın ID 'sini al
"FocusedItem item seçilen satırın ilk kolon değerini text özelliği ile verir
ID = Convert.ToInt32(ListView1.FocusedItem.Text)

"ilgili ID ye ait kayıtları al


"connection nesnesi(form load da connectionstring alındı)
Dim conn As New System.Data.OleDb.OleDbConnection(conStr)
"işlem için command nesnesi
Dim comm As New System.Data.OleDb.OleDbCommand
"command nesnesine bağlantıyı bildir
comm.Connection = conn

"command nesnesinin komut türünü ata
comm.CommandType = CommandType.Text

"ilgili kayıdı sorgulayacak string(bu serferde parametresiz yapalım)
comm.CommandText = "SELECT *FROM Tablo1 WHERE ID=" + ID.ToString()

"connectionu aç
comm.Connection.Open()

"gelen kayıdı alacağımız datareader
Dim rd As System.Data.OleDb.OleDbDataReader

"kayıdı al
rd = comm.ExecuteReader(CommandBehavior.CloseConnection)

"tek satır geleceği için döngüye gerek yok
"satırı oku
rd.Read()

"değerleri yerlerine yaz(düzelt-sil modu için hazır hale getir)
TextBox1.Text = rd.GetValue(1)
TextBox2.Text = rd.GetValue(2)
TextBox3.Text = rd.GetValue(3)

comm.Connection.Close()
conn.Dispose()
comm.Dispose()
End Sub
End Class



Kodlar biraz fazla gibi görünsede aslında yaptığı işlere bakarak normal olduğunu söyleyebiliriz. Daha önce yazdığım makalede bu işlemleri kod yazmadan hazır nesneler ile nasıl yapıldığını anlatmıştım. Hazır nesneler bağlantılar vs... için kod yazmazsınız, bağlantıları design time de yani formunuzu tasarlarken wizardlar ile yaparsınız. Fakat windows uygulamanız yada web uygulamanız her yer değiştirdiğinde sorunlar yaşarsınız. En iyisi tüm bu işleri kod ile yaparak dinamik hale getirmektir.

Yukarıda gördüğünüz işlemler Ms Access içindir. Biraz bilginiz var ise; bu programı MS SQL 2000-2005 'e terfi ettirmeniz çok zor olmayacaktır. Bu da ADO.NET 'in nimetlerinden biridir.



[Resim: www.zohreanaforum.com][COLOR=#c5003f]Kodları Ms Access 2003 kullanarak hazırladım. Eğer Ms Access 2007 kullanıyorsanız Connection String değişebilir. Connection String için bu web siteden yararlanabilirsiniz.



Bu arada ilgilenen arkadaşlar bu kodların C# versiyonu da mevcut. Aşağıdaki linkten Hem C# hem de VB için yazılmış kodları indirebilirsiniz.

VB ve C# kodlarını buradan indirin



[Resim: www.zohreanaforum.com][COLOR=#c5003f]Eğer kodları indirirseniz projeyi çalıştırmadan önce indirdiğiniz veritabanını uygun yerine ("c:\vt1.mdb") taşımayı unutmayın

[Resim: info3.gif][COLOR=#c5003f]
Silme ve Duzeltme modullerinin çalışabilmesi için önce bul modulunun çalıştırılması gerekir. Bunun dışında oluşabilecek hataları kontrol etmedim. Örneğin sayı yerine harf(ler) girerek kaydetmeye çalışırsanız hatalar oluşabilir. Lütfen bunları göz önüne alın.
[COLOR=#c5003f]
[COLOR=#c5003f]
[COLOR=#c5003f]
[COLOR=#c5003f]alıntıdır//
[Resim: 114ld.jpg]



Ben göremem daha uzun boyunu
Ahret derler kısaltamam yolunu
Bugün Sahı Merdan sarsın oglunu
Yetis Ya Üseyin baban gidiyo

İçerik sağlayıcı paylaşım sitesi olarak hizmet veren Pir Zöhre Ana Forum sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.K'nın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur. Sitemiz hakkında yapılacak tüm hukuksal şikayetleri İletişim bağlantısından bize ulaşıldıktan en geç 3 (üç) gün içerisinde ilgili kanunlar ve yönetmenlikler çerçevesinde tarafımızca incelenerek, gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.