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 (2974)
  • 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.

This entry was posted in Mysql, Veritabanları, VisualBasic.Net and tagged , , , , , , . Bookmark the permalink.

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

  1. By_h424n says:

    Hocam Acil Bu Konuda yardıma İhtiyacım Var Msn Versem Eklermisin Bi Zahmet 🙂

    [email protected]

  2. Ehocam says:

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

  3. MeMaTiAs says:

    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. Ehocam says:

    @MeMaTiAs;

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

  5. Mustafa Yılmaz says:

    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************[email protected]

  6. Ehocam says:

    Mustafa Yılmaz;

    Ekledim

  7. Turgut Akdağ says:

    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. Ehocam says:

    @Turgut Akdağ;

    Hangi veritabanını kullanıyorsunuz?

  9. Burak Uyar says:

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

  10. Ehocam says:

    @Burak Uyar;

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

  11. Burak Uyar says:

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

  12. kaan says:

    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. Ehocam says:

    @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. h.ibrahim says:

    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..

    [email protected]

  15. h.ibrahim says:

    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. Ehocam says:

    @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. h.ibrahim says:

    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. h.ibrahim says:

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

  19. Ehocam says:

    @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. omer says:

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

  21. Ehocam says:

    @omer;

    [email protected] msn adresimi ekleyerek irtibata geçebilirsiniz.

  22. Murat says:

    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. Murat says:

    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. Ehocam says:

    @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. Murat says:

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

  26. Ferhat says:

    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. ferhat says:

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

  28. Ehocam says:

    @ferhat;

    Msn’e ekledim hocam.

  29. Ehocam says:

    @Murat;

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

  30. Ozcan says:

    ekler misiniz benide , bu konu üstünde birşey sormam gerekli size 🙁

  31. Ehocam says:

    @Ozcan;

    Msn Adresinizi ekledim. Kolay gelsin.

  32. ahmet says:

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

  33. Ehocam says:

    [email protected]

    Mysql Connector kurdun mu?

  34. abdul k says:

    Teşekkürler..

  35. Selim D says:

    Hocam MySQL bağlantısını kurdum ve sorunsuz. Ancak tablomdan veri çekemiyorum. Gelen veride şu yazıyor sadece: MySql.Data.MySqlClient.MySqlDataReader

    Yardımcı olurmusunuz?

  36. @selim, makalenin başında paylaştığım videoyuyu izler misin? Yardımcı olmazsa tekrar iletişime geçebilirsin 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *