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 (3311)
- 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.
- 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
- 2 tane ToolStripStatusLabel
- 1 ToolStrip
- HelpToolStripButton.text = “Yardım”
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.
Hocam Acil Bu Konuda yardıma İhtiyacım Var Msn Versem Eklermisin Bi Zahmet 🙂
[email protected]
Ekledim hocam. İletişim kurmanızı bekliyorum.
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
@MeMaTiAs;
Ben teşekkür ederim. Yardımcı olabildiysem ne mutlu bana 🙂
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]
Mustafa Yılmaz;
Ekledim
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.
@Turgut Akdağ;
Hangi veritabanını kullanıyorsunuz?
Kardeş iyi güzel. ama demo çalışmıyor. 🙂 Anlatım harika
@Burak Uyar;
Link düzeltilmiştir. Bildirim yaptığın için teşekkürler.
Hemen ilgilendiğiniz için ben teşekkür ederim.
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.
@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.
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]
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;”)
@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.
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..
Hocam birşey daha.. Server gerektirmeyen database olarak neleri önerirsiniz.. Access gibi tabloda satır sınırlaması (max 1000 kayıt) olmayacak..
@h.ibrahim;
SQL Lite veritabanını kullanabilirsin. Firefox’un veritabanı SQL Lite’dır mesela. Kurulum gerektirmez, tek bir dosyadan attach ile bunu halledebilirsin.
mysqli bağlamada daha ayrıntılı bilgi almak istiyorumda beni eklermisiniz
@omer;
[email protected] msn adresimi ekleyerek irtibata geçebilirsiniz.
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 :):)
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..
@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.
Access veritabanını dataset ile direk bağlamak gibimi yani ?
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
Hocam cok acil yardıma ihtiyacım var. bu konu hakkında zamanım cok az ekler misiniz ?
msn: cs*******@w.cn
@ferhat;
Msn’e ekledim hocam.
@Murat;
Evet access’de yapılan yöntemle yapabilirsin.
ekler misiniz benide , bu konu üstünde birşey sormam gerekli size 🙁
@Ozcan;
Msn Adresinizi ekledim. Kolay gelsin.
hocam bn vb.nette referansta mysql.dll yok hersey yuklu ama çıkmıyor yardımcı olurmusunuz
[email protected]
Mysql Connector kurdun mu?
Teşekkürler..
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?
@selim, makalenin başında paylaştığım videoyuyu izler misin? Yardımcı olmazsa tekrar iletişime geçebilirsin 🙂