Ehocam.Com
2May/1033

Vb.Net İle MYSQL Veritabanına Bağlantı Kurmak

Bu yazımda size Vb.Net ile Mysql veritabanına bağlantının nasıl kurulacağını anlatacağım. Mysql ile ilk defa program yazacaksanız burada ki videolu kurulumu izlemenizi öneririm.

Veritabanımızı, performanslı kullanabilmek için, veritabanını ayrı bir makinede tutarız. Makinenin görevi sadece veritabanını çalıştırmak ve performanslı bir şekilde kullanıcıya bu bilgileri aktarmaktır.Çalışmalarınızda veritabanını farklı bir yerde tutmanızı öneririm.

Örneğin ben, yeni bir projeye başlamadan önce, Vmware üzerinde temiz kurulum Windows Server 2003 makinemi, projeye yapmayı düşündüğüm veritabanını kurup,  performans ayarlarını yaparım.

Eğer ilk defa Mysql ile bir bağlantı kuracaksanız bazı sorunlar yaşayabilirsiniz.  (veritabanını ayrı bir bilgisayarda tutarsanız)

Bunlardan birincisi güvenlik izinleridir. Mysql oluşturduğunuz ana kullanıcının kurulu bilgisayar dışından girmenize izin vermez.  Ana kullanıcınız ne kadar yüksek izinlere sahip olsa da dışardan gelen kullanıcılara bağlanması için özel ayarlamalar yapmamız gerekir. Kurulum videosunun sonuna doğru bu konu hakkında kısa bir açıklama yapmıştım. (Video da bayağa yerde tıkanmışım. Tek seferde video çekmenin zararları :( )

Mysql veritabanı framework üzerinde sınıflara sahip bir veritabanı değildir. Yani Mysql'in bağlantı ve sorgulama işlemleri için Mysql tarafından yazılmış olan Connector denilen bağlantı aracını kullanacağız.

Bağlantı aracını aşağıda ki linkten indirip kurabilirsiniz.

Mysql Connector Net (666)
  • Connector (bundan sonra baÄŸlantı aracı olarak yazılacak) aracımızı da yükledikten sonra Visual Studio da bu baÄŸlantı aracını eklememiz gerekiyor. Yeni bir proje oluÅŸturduktan sonra menüden PROJECT ->ADD REFERENCES bölümünden .NET Sekmesinden Mysql.Data seçip ekliyoruz.
VisualStudio'da Mysql Bağlantı Aracını Projeye Dahil Etme

VisualStudio'da Mysql Bağlantı Aracını Projeye Dahil Etme

  • Mysql için baÄŸlantı dizelerini aÅŸağıda yer verdim. Bunlardan birini seçip baglanti_dizi içine yazmanız yeterlidir. Hepsinin kullanım amaçları hepsi aynıdır. İhtiyacınız olan birisini kullanabilirsiniz.
 Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword; 
 Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;Connection Timeout=5; 
 Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;Port=3306; 
 Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;CharSet=UTF8; 
  • Server: Mysql sunucunun bulunduÄŸu adrestir. Örn : ehocam.com, 192.168.2.21, 88.227.179.231, localhost, 127.0.0.1
  • Database: Mysql sunucusunda, belirtmiÅŸ olduÄŸunuz adresteki, kullanmak istediÄŸiniz veritabanının adıdır.
  • Uid : SeçtiÄŸiniz veritabanının eriÅŸim yetkisine sahip kullanıcının, kullanıcı adıdır.
  • Pwd : SeçtiÄŸiniz veritabanının eriÅŸim yetkisine sahip kullanıcının, ÅŸifresidir.
  • Connection Timeout : BelirlediÄŸiniz saniye kadar baÄŸlantı kurmaya çalışacaktır. EÄŸer belirlediÄŸiniz saniye içinde baÄŸlantı kuramazsa hata verecektir.
  • Port : Mysql sunucusunun hizmet verdiÄŸi port 3306 (standart) dışında ise  buraya hizmet verdiÄŸi portu yazabilirsiniz.
  • Charset : Mysql sunucusu üzerinde, baÄŸlanacağınız veritabanının, hangi karakter seti üzerinde iÅŸlem yapmasını istiyorsanız, bu deÄŸere karakter setini yazmalısınız.

Yukarıda yazdıklarım mysql bağlantısı için kullanılan özelliklerdir. Bağlantı aracını yükledikten sonra framework kütüphanesine MySqlConnectionStringBuilder adlı bir sınıf ekleniyor.  Tabi bu sınıfları kullanabilmek için MySql.Data.MySqlClient formumuza dahil ediyoruz.

Imports MySql.Data.MySqlClient

MySqlConnectionStringBuilder sınıfı yukarıda ki bağlantı dizisini oluşturmamıza yarıyor. Kullanımı aşağıdadır.

Dim baglanti_dizisi As New MySqlConnectionStringBuilder
baglanti_dizisi.Server = "192.168.153.132"
'baglanti_dizisi.Database = "ogrenci"
baglanti_dizisi.UserID = "cagdaskarademir"
baglanti_dizisi.Password = "123456"

Bağlantı kurmak için ise aşağıda ki mysql bağlantısı değişkenimi kullanıyorum.

 Public mysql_baglanti As New MySqlConnection 

Bağlanmak için ise;

        mysql_baglanti.ConnectionString = baglanti_dizisi.ToString

        Try
            mysql_baglanti.Open() 'Bağlantımı Açıyorum
        Catch ex As MySqlException 'Hata sınıfı olarak Mysql'in hata sınıfını kullanıyorum.
            MessageBox.Show(ex.Message, "Hata Kodu : " & ex.Number.ToString, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            mysql_baglanti.Close() 'Performans açısından açtığım bağlantıyı kapatıyorum.
        End Try

Kısacası şimdiye kadar bağlantımızın nasıl kurulduğunu gördük. Şu zamana kadar kodların tümünü aşağıda bulabilirsiniz. Ama bağlantımızın durumunu, Mysql sınıfı içindeki bir fonksiyon aracılığı ile kolayca yapabiliyoruz. Önce kodlara gözatın hemen ardından Mysql sınıfının StateChange olayına gözatalım.

Imports MySql.Data.MySqlClient 'Kütüphaneyi dahil ediyoruz.

Public Class Form1

    Public baglanti_dizisi As New MySqlConnectionStringBuilder
    Public mysql_baglanti As New MySqlConnection

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        baglanti_dizisi.Server = "192.168.153.132" 'Sunucu Ip adresini giriyorum
        baglanti_dizisi.Database = "ogrenci" 'Veritabanı adını giriyorum
        baglanti_dizisi.UserID = "cagdaskarademir" 'Kullanıcı adımı giriyorum
        baglanti_dizisi.Password = "123456" 'ÅŸifremi giriyorum

        mysql_baglanti.ConnectionString = baglanti_dizisi.ToString

        Try
            mysql_baglanti.Open() 'Bağlantımı açıyorum
        Catch ex As MySqlException 'MysqlExpection sınıfını kullanarak mysql hata verirse hataları ayrıntılı alabiliyorum
            MessageBox.Show(ex.Message, "Hata Kodu : " & ex.Number.ToString, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            mysql_baglanti.Close() 'Bağlantımı kapatıyorum
        End Try
    End Sub

End Class

mysql_baglanti.Open() komutunu verdikten sonra, baglanti_dizisi'nde yer alan bilgiler doğrultusunda işlemler yapılmaya başlanıyor. Bu aşamada, önce sunucuyu araması,bağlanması, işlem yapması ve en sonunda bağlantının kapanması gerekir.

Biz MySqlConnection sınıfında bağlantının durumunu State özelliği ile yapabiliyoruz. Fakat projelerimizde mysql bağlantısının anlık değişimlerini almak isteyebiliriz.

Örneğin bağlantı kurulumu yaparken StatusStrip'de ayrı bir resim gösterip, Bağlantı kurulduğunda veya koptuğunda ayrı bir resim göstermek isteyebiliriz.

Bu gibi bir ihtiyaçta, Mysql sınıfında yer alan StateChange olayını handle edip kullanabiliriz.

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AddHandler mysql_baglanti.StateChange, AddressOf mysql_baglanti_durumu 'StateChange olayını mysql_baglanti_durum fonksiyonuna yönlendiriyorum.
    End Sub

    Private Sub mysql_baglanti_durumu(ByVal sender As Object, ByVal e As StateChangeEventArgs)
        MessageBox.Show(e.CurrentState.ToString) 'Bağlantı değişiminde hemen bana haber vermesini sağlıyorum.
    End Sub

Şimdi de bu yaptıklarımızı bir projede kullanalım.

Aşağıdaki gibi bir görüntü oluşturun.

  • 2 Tane Buton
  • 3 Tane Label
    • Label1.text=" Server"
    • Label2.text= "UserID"
    • Label3 .text="Password"
  • 3 Tane Textbox
    • txtServer
    • txtUserId
    • txtPassword
  • 1 StatusStrip
    • 2 tane ToolStripStatusLabel
      • ToolStripStatusLabel1.text="Mysql BaÄŸlantı Durumu"
      • ToolStripStatusLabel2.text=""  --> BaÄŸlantı deÄŸiÅŸimlerinde resimler burada çıkacak
  • 1 ToolStrip
    • HelpToolStripButton.text = "Yardım"

Mysql Bağlantısı Örneği Form Önizleme

Imports MySql.Data.MySqlClient

Public Class Form1

    Public baglanti_dizisi As New MySqlConnectionStringBuilder
    Public mysql_baglanti As New MySqlConnection

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        baglanti_dizisi.Server = txtServer.Text 'İlk kutumun adı
        'baglanti_dizisi.Database = "ogrenci" 'Projenin amacına göre girilmedi. Girilmesi şart değil.
        baglanti_dizisi.UserID = txtUserID.Text 'İkinci kutumun adı
        baglanti_dizisi.Password = txtPassWord.Text 'Üçüncü kutumun adı

        mysql_baglanti.ConnectionString = baglanti_dizisi.ToString

        Try
            mysql_baglanti.Open()
        Catch ex As MySqlException
            MessageBox.Show(ex.Message, "Hata Kodu : " & ex.Number.ToString, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        AddHandler mysql_baglanti.StateChange, AddressOf mysql_baglanti_durumu
    End Sub

    Private Sub mysql_baglanti_durumu(ByVal sender As Object, ByVal e As StateChangeEventArgs)
        If e.CurrentState = ConnectionState.Connecting Then
            Me.ToolStripStatusLabel2.Image = My.Resources.baglaniyor
        ElseIf e.CurrentState = ConnectionState.Open Then
            Me.ToolStripStatusLabel2.Image = My.Resources.baglandi
        ElseIf e.CurrentState = ConnectionState.Closed Then
            Me.ToolStripStatusLabel2.Image = My.Resources.baglanti_sonlandi
        End If
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        mysql_baglanti.Close()
    End Sub

    Private Sub HelpToolStripButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles HelpToolStripButton.Click
        System.Diagnostics.Process.Start("http://www.ehocam.com/?p=842")
    End Sub
End Class

Projenin demosuna ve kaynak kodlarına aşağıdan ulaşabilirsiniz.


Comments (33) Trackbacks (1)
  1. Hocam Acil Bu Konuda yardıma İhtiyacım Var Msn Versem Eklermisin Bi Zahmet :)

    xxxxx@hotmail.com

  2. Ekledim hocam. İletişim kurmanızı bekliyorum.

  3. Hocam böyle bir yazıyı bizlerle paylaştığınız için size minnettarım. Gerçekten faydalı olacak bir yazı, şahsen benim aklımdaki bütün MySQL sorularına cevap verdi. Teşekkür ederim

  4. @MeMaTiAs;

    Ben teşekkür ederim. Yardımcı olabildiysem ne mutlu bana :)

  5. bu mysql üzerine bi projem var ama baÄŸlantıyı oluÅŸturdum…veri çekmeyi yapıyorum ufak bi sorunum var.bu konuda yardım için ekleyebilir misiniz ?

    r************n@hotmail.com

  6. Mustafa Yılmaz;

    Ekledim

  7. Hocam eline sağlık güzel bir çalışma olmuş.
    Benim şöyle bir sorum olacak. Vbnet ile yaptığım proje vasıtasıya sitedeki veri tabanına bağlanmak ve datadaki verileri çekerek kendi datama kaydetmek istiyorum. Bu konuda yardımcı olursanız sevinirim.

  8. @Turgut AkdaÄŸ;

    Hangi veritabanını kullanıyorsunuz?

  9. Kardeş iyi güzel. ama demo çalışmıyor. :) Anlatım harika

  10. @Burak Uyar;

    Link düzeltilmiştir. Bildirim yaptığın için teşekkürler.

  11. Hemen ilgilendiğiniz için ben teşekkür ederim.

  12. mysql e bağlanmak için host panelinde mysql kullanıcısı ekliyor musunuz. bende localhost mysql e bağlanrum ama internetteki mysql e bağlanamıyorum. aynı kodlar serverdaki mysqle bağlanmak istediğimde hata veriyor. ama serverdaki mysql bilgisayarımın ıp sini ekleyince bağlanabiliyor. bunu yapmadan bağlanmak istiyorum ben.

    siz nasıl yaptınız. ben nerde hata yapıyorum.

  13. @kaan;

    http://blog.ehocam.com/?p=823

    Bu videoyu izledin mi? Cevabın burada var aslında. Eğer sorunun cevabı değilse, lütfen tekrardan yaz, anlatmaya çalışırım.

    İyi Çalışmalar.

  14. acil yardım.. baglantıyı kuramadım bi türlü.. hata kontrolü yaptırıyorum ve hata veriyor hep.. root lada denedim yeni kullanıcıyla da denedim olmuyor..!

    kodlarım..!!

    srvinfo.Server = “localhost”
    srvinfo.UserID = “root” : srvinfo.Password = “xxxxxx”
    baglanti.ConnectionString = srvinfo.ToString

    Try
    baglanti.Open()
    Label2.Text = “Veritabanına BaÄŸlanılıyor..”
    Catch

    Label2.Text = “Veritabanına BaÄŸlanılamıyor..”
    If MessageBox.Show(“Veritabanına baÄŸlanılamıyor..”, “BaÄŸlantı Hatası..”, MessageBoxButtons.OK, MessageBoxIcon.Error) = Windows.Forms.DialogResult.OK Then
    Application.Exit()
    End If

    End Try

    acil cevap mail adresim..

    hxxra@yahoo.com.tr

  15. hocam problemi çözdüm.. illaki portu belirtmek lazımmış..!

    kod..

    Public baglanti As New MySqlConnection(“Server=localhost;Database=aaa;Uid=sss;Pwd=dddd;Port=8080;”)

  16. @h.ibrahim;

    Hocam öncelikle kolay gelsin. EÄŸer mysql sunucusunu varsayılan port dışında bir port kullanıyorsan mecburen belirtmen lazım. Senin mysql sunucunda kurulum yaparken port numarası olarak 8080 seçmiÅŸsin. Normalde varsayılan port numarası 3306′dır. Bu yüzden problem yaÅŸamışsın.

    Tekrardan kolay gelsin. Problemlerinde yardımcı olmaya çalışırım. İyi çalışmalar.

  17. Teşekkürler hocam..

    Onu göze alarak standart porta geri çevirdim ama gene çalışmadı.. Portu belirtene kadar hata aldım.. Sanıyorum sistemden kaynaklanan bi sorun oldu birazda..! Otomatik kendisi tanımadı.. Neyse böyle daha iyi oldu.. İlginize teşekkür ederim..
    İlk defa denedim, baya uğraştım ama sonunda çalıştı.. Unutmam bir daha artık..

  18. Hocam birşey daha.. Server gerektirmeyen database olarak neleri önerirsiniz.. Access gibi tabloda satır sınırlaması (max 1000 kayıt) olmayacak..

  19. @h.ibrahim;

    SQL Lite veritabanını kullanabilirsin. Firefox’un veritabanı SQL Lite’dır mesela. Kurulum gerektirmez, tek bir dosyadan attach ile bunu halledebilirsin.

  20. mysqli bağlamada daha ayrıntılı bilgi almak istiyorumda beni eklermisiniz

  21. @omer;

    cagdas@inbox.com msn adresimi ekleyerek irtibata geçebilirsiniz.

  22. Hocam Kralsın Eline Koluna Sağlık :)
    Şimdi İş İşyerine Bi Yönetim Paneli Yazmaya Kaldı İşleri Yoluna Koyarsam Hele Bide Tutarsa Güzel Şeyler Olur :) :)

  23. hocam birde sorum olucak..

    bağlantıyı kurduk sorunsuz çalışıyo :)
    veri gönderme ve alma nasıl yapıcaz bunuda açıklama imkanın varsa çok sevinirim :)

    Tekrar teşekkürler..

  24. @Murat ;

    “Vb.net Mysql Ado.Net”  şeklinde google da arama yap. Çekme yöntemi olarak birden fazla yöntem kullanılabilir. ÖrneÄŸin DataSet,DataTable kullanabileceÄŸin gibi, verilerin için bir sınıf yazıp, verileri bu sınıf üzerinde tutabilir ve nesnelere baÄŸlayabilirsin.Â

    Kayıt için ise StoreProcedure kullanabilirsin.

  25. Access veritabanını dataset ile direk bağlamak gibimi yani ?

  26. hocam  çok acil yarıdmınıza ihtiyacım var çok az zamanım kaldı bi msn ekleyip yardımcı olabilirmsiniz.
    saygılar
    msn : c*****@w.cn

  27. Hocam cok acil yardıma ihtiyacım var. bu konu hakkında zamanım cok az ekler misiniz ?
    Â
    msn: cs*******@w.cn

  28. @ferhat;

    Msn’e ekledim hocam.

  29. @Murat;

    Evet access’de yapılan yöntemle yapabilirsin.

  30. ekler misiniz benide , bu konu üstünde birşey sormam gerekli size :(

  31. @Ozcan;

    Msn Adresinizi ekledim. Kolay gelsin.

  32. hocam bn vb.nette referansta mysql.dll yok hersey yuklu ama çıkmıyor yardımcı olurmusunuz

  33. ahmet@

    Mysql Connector kurdun mu?


Leave a comment