Ana Sayfa... Duyurularım... Ben Kimim ??? Projelerim... Tozlanmış dosyalar... İrtibata Geçin...
 
Asp.Net Mysql veritabanına bağlantı kurma

Yazar :  Okan  Düzgün             Yayınlanma Saati :  2015-12-28 00:08:07

Arkadaşlar bu yazımızda asp.net ile mysql veritabanına bağlantı işlemini işleyecegiz. Ben bilgisayarıma sanal mysql veritabanı kurup localhost ile bağlantıyı anlatmayacagım. Bilgisayarınıza mysql veritabanı oluşturup localhost kısmından veritabanı oluşturmak istiyorsanız internette gerekli dökümanlar mevcut, araştırıp kurabilirsiniz. 

Benim anlatmak istediğim hostumuzda barındırdımız mysql veritabanına bağlantıyı anlatacagım. Zaten bilgisayarınızda mysql kurulu ise işlemler hemen hemen aynı.

İlk olarak deneyeceğim zaman, kendi hostumdaki veritabanına bağlanmak istedim, kontrol panelime girip kendime mysql veritabanı ve kullanici adi, sifresi oluşturduktan sonra denemek için tablo oluşturup tabloma bağlanıp veri okumak istedim.

Veritabanımı oluşturduktan sonra nasıl bağlanacagım hakkında biraz internette araştırma yaptım. Web sayfamızdan veritabanımıza bağlabilmemiz için ilk olarak bağlantı kodlarımızı tanıtabilmemiz için MySql.Data.MySqlClient kütüphanesi import etmemiz gerekiyor tabi import işlemi için gerekli olan Msql.Data.dll dosyamızı sayfamıza referans olarak göstermemiz gerek.

Bunun için solution explorer üzerinde sitemizin isminin üzerinde mause basılı iken properties seçeneğine tıklıyoruz ve karşımıza aşagıdaki resimler cıkmakta;

Buradan properties secenegine tıklıyoruz;

daha sonra karşımıza aşagıdaki resim gelmekte ve burdan Add butonuna tıklıyoruz;

Buradan dosyamızın yolunu bulup seçiyoruz ve ok butonuna basıyoruz ve Mysql.Data.dll dosyamızı sitemize referans olarak göstermiş bulunuyoruz.

siteme dll dosyamı referans ettikten sonra .vb sayfamıza  Imports MySql.Data.MySqlClient eklemeyi unutmuyoruz.

mysql.data.dll dosyasını aşagıdaki linkten indirebilirsiniz.

http://dev.mysql.com/downloads/connector/net/5.1.html

veya buradan indirebilirsiniz.

Mysql için bağlantı dizileri ;

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"
  • Server: Mysql sunucunun bulunduğu adrestir. Örn : okanduzgun.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

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

Mysql veritabanına yukarıdaki yollardan bağlanabiliriz, veri okuma, kaydetme, silme ve update işlemleri diğer system.data.oledb yani access veritabanı işlemleriyle aynı burada dikkat etmemiz gereken tek değişiklik;

    Dim baglanti As New MySqlConnection
    Dim oku As MySqlDataReader
    Dim sorgu As New MySqlCommand
    Dim adap As New MySqlDataAdapt

işlemlerimizi yukarıdaki gibi kullanmak olacaktır.

Örnek olarak mysql veritabanından okuma işlemi yapmak istersek aşagıdaki gibi işlemimizi gerçekleştirebiliriz.

Imports MySql.Data.MySqlClient
Partial Class check
    Inherits System.Web.UI.Page
  
    Sub versiyonkontrol()
        Dim baglanti As MySqlConnection
        baglanti = New MySqlConnection("server=Server adresi; user id=veritbani kullanici id; password=şifremiz; database=veritabanı ismimiz;")
        sorgu = New MySqlCommand("select * from guncel where id=@id", baglanti)
        sorgu.Parameters.AddWithValue("@id", 1)
        baglanti.Open()
        oku = sorgu.ExecuteReader()
        If oku.Read() = True Then
            newversiyon = Convert.ToDouble(oku("newversiyon"))
        End If
        oku.Close()
        baglanti.Close()
    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        versiyonkontrol()
       
    End Sub
End Class

Veritabanına bağlanmaya çalıştığımda almış oldugum iki hatadan bahsetmek istiyorum. ilki;

Compiler Error Message: BC30002: Type 'MySqlConnection' is not defined. 

MySql tanımlı değil hatası alıyorum; Bu hatanın çözümünü yanlış dll dosyası referans ettiğimden dolayı kaynaklandığını buldum. Aslında dll dosyası yanlış degildi, referans olarak bin klasörü içine dosyaları atmıyordu sadece referans olarak web config dosyasında gösterme işlevini kullanıyordu ama hostuma yolladığım zaman bu hatayı almaktaydım. Web dosyasına referans olarak degilde, bin klasörü içerine dll dosyalarını referans eden dogru dll dosyasını yükleyince sorun çözüldü. ikinci hata ise;

security exception hatası

bu hatanın çözümüde ise dll dosyasından kaynaklandı. Aslında bu şekilde hata vermesinin sebebi kullanmış olduğumuz hosting güvenlik ayarlarının medium olmasından kaynaklanıyor. Bizden güvenlik ayarlarımızı Full Trust yapmamızı istiyor ama buda sitemizde güvenlik açığı oluşturmak demektir. Bunun çözümünde ise daha önce karşılaştıgım ve sorunu giderdiğim yöntemi kullanmıştım. ddl dosyasının farklı sürümünü yükleyerek bu sorunu gidermiştim. Ben Mysql connectionun son sürüm olan dll dosyasını siteme referans etmiştim ve sonrasında bu sorun ile karşılaştım ve daha sonra bir alt sürümü yükleyerek sorunum çözüldü. Bu neyden kaynaklanıyor derseniz tam olarak bende bilmiyorum ama dll dosyasındaki bazi ayarlar galiba hostumuzdaki izni olmayan yerleri tetikliyor ve dogal olarak serverimiz böyle bir hata vermektedir.

Bu yazımızda asp.net te mysql veritabanına bağlanma ve karşımıza cıkabilecek hatalara deyindik.

yararlı olması dileğiyle, iyi kodlamalar...



 

 
 Dosyaları indirmek ve yorumları görebilmek için lütfen kullanici girişi yapınız !!!  
 
 
 


 

Son Güncelleme :  16/04/2017
  Design and Coding - Okan Düzgün 2011 - 2017 © Tüm Hakları Saklıdır.