A
B
C
Ç
D
E
F
G
Ğ
H
I
İ
J
K
L
M
N
O
P
R
S
Ş
T
U
Ü
V
Y
Z
Q
W
X
+ İçerik Ekle
.NET, 2.0, ile, Access, Veritabanı, İşlemleri
.NET 2.0 ile Access Veritabanı İşlemleri

.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ı anlattım. Daha çok yeni başlayan arkdaşların işine yarayacağını düşünüyorum
.NET 2.0 ile Access Veritabanı İşlemleri

Bu işlemleri mümkün olduğunca basite indigiyerek anlatmaya çalıştım. Umarım işinize yarar.


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.

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



Eğer kodları indirirseniz projeyi çalıştırmadan önce indirdiğiniz veritabanını uygun yerine ("c:\vt1.mdb") taşımayı unutmayın


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.



Arkadaşlar benden bu kadar. Ben test etmiştim ama yinede Hatalar varsa lütfen belirtin. Bu dokumanı hazırlamak bayağı bir zamanımı aldı. Yorumlarınızı bekliyorum�.

İyi çalışmalar�




brush






  Ad Soyad
  Yorum