" Umut, hiç görmeyen birine gökkuşağını anlatmak kadar zor ve imkansız... "

Categories

-

Asp.Net Mysql veritabanina baglanti kurma

Arkadaslar bu yazimizda asp.net ile mysql veritabanina baglanti islemini isleyecegiz. Ben bilgisayarima sanal mysql veritabani kurup localhost ile baglantiyi anlatmayacagim. Bilgisayariniza mysql veritabani olusturup localhost kismindan veritabani olusturmak istiyorsaniz internette gerekli dökümanlar mevcut, arastirip kurabilirsiniz. 

Benim anlatmak istedigim hostumuzda barindirdimiz mysql veritabanina baglantiyi anlatacagim. Zaten bilgisayarinizda mysql kurulu ise islemler hemen hemen ayni.

Ilk olarak deneyecegim zaman, kendi hostumdaki veritabanina baglanmak istedim, kontrol panelime girip kendime mysql veritabani ve kullanici adi, sifresi olusturduktan sonra denemek için tablo olusturup tabloma baglanip veri okumak istedim.

Veritabanimi olusturduktan sonra nasil baglanacagim hakkinda biraz internette arastirma yaptim. Web sayfamizdan veritabanimiza baglabilmemiz için ilk olarak baglanti kodlarimizi tanitabilmemiz için MySql.Data.MySqlClient kütüphanesi import etmemiz gerekiyor tabi import islemi için gerekli olan Msql.Data.dll dosyamizi sayfamiza referans olarak göstermemiz gerek.

Bunun için solution explorer üzerinde sitemizin isminin üzerinde mause basili iken properties seçenegine tikliyoruz ve karsimiza asagidaki resimler cikmakta;

Buradan properties secenegine tikliyoruz;

daha sonra karsimiza asagidaki resim gelmekte ve burdan Add butonuna tikliyoruz;

Buradan dosyamizin yolunu bulup seçiyoruz ve ok butonuna basiyoruz ve Mysql.Data.dll dosyamizi sitemize referans olarak göstermis bulunuyoruz.

siteme dll dosyami referans ettikten sonra .vb sayfamiza  Imports MySql.Data.MySqlClient eklemeyi unutmuyoruz.

mysql.data.dll dosyasini asagidaki linkten indirebilirsiniz.

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

veya buradan indirebilirsiniz.

Mysql için baglanti 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 bulundugu adrestir. Örn : okanduzgun.com, 192.168.2.21, 88.227.179.231, localhost, 127.0.0.1
     
  • Database: Mysql sunucusunda, belirtmis oldugunuz adresteki, kullanmak istediginiz veritabaninin adidir.
     
  • Uid : Seçtiginiz veritabaninin erisim yetkisine sahip kullanicinin, kullanici adidir.
     
  • Pwd : Seçtiginiz veritabaninin erisim yetkisine sahip kullanicinin, sifresidir.
     
  • Connection Timeout : Belirlediginiz saniye kadar baglanti kurmaya çalisacaktir. Eger belirlediginiz saniye içinde baglanti kuramazsa hata verecektir.
     
  • Port : Mysql sunucusunun hizmet verdigi port 3306 (standart) disinda ise  buraya hizmet verdigi portu yazabilirsiniz.
     
  • Charset : Mysql sunucusu üzerinde, baglanacaginiz veritabaninin, hangi karakter seti üzerinde islem yapmasini istiyorsaniz, bu degere karakter setini yazmalisiniz.


Yukarida yazdiklarim mysql baglantisi için kullanilan özelliklerdir. Baglanti aracini yükledikten sonra framework kütüphanesine MySqlConnectionStringBuilder adli bir sinif ekleniyor.  Tabi bu siniflari kullanabilmek için MySql.Data.MySqlClient formumuza dahil ediyoruz.

Imports MySql.Data.MySqlClient

Baglanti kurmak için ise asagida ki mysql baglantisi degiskenimi kullaniyorum.

Public mysql_baglanti As New MySqlConnection

Baglanmak için ise;

mysql_baglanti.ConnectionString = baglanti_dizisi.ToString()
 
Try
    mysql_baglanti.Open() 'Baglantimi Açiyorum
Catch ex As MySqlException 'Hata sinifi olarak Mysql'in hata sinifini kullaniyorum.
    MessageBox.Show(ex.Message, "Hata Kodu : " & ex.Number.ToString, MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
    mysql_baglanti.Close() 'Performans açisindan açtigim baglantiyi kapatiyorum.
End Try

Kisacasi simdiye kadar baglantimizin nasil kuruldugunu gördük. Su zamana kadar kodlarin tümünü asagida bulabilirsiniz. Ama baglantimizin durumunu, Mysql sinifi içindeki bir fonksiyon araciligi ile kolayca yapabiliyoruz. Önce kodlara gözatin hemen ardindan Mysql sinifinin StateChange olayina gözatalim.

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" 'Veritabani adini giriyorum
        baglanti_dizisi.UserID = "cagdaskarademir" 'Kullanici adimi giriyorum
        baglanti_dizisi.Password = "123456" 'sifremi giriyorum
 
        mysql_baglanti.ConnectionString = baglanti_dizisi.ToString
 
        Try
            mysql_baglanti.Open() 'Baglantimi açiyorum
        Catch ex As MySqlException 'MysqlExpection sinifini kullanarak mysql hata verirse hatalari ayrintili alabiliyorum
            MessageBox.Show(ex.Message, "Hata Kodu : " & ex.Number.ToString, MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            mysql_baglanti.Close() 'Baglantimi kapatiyorum
        End Try
    End Sub
 
End Class

mysql_baglanti.Open() komutunu verdikten sonra, baglanti_dizisi‘nde yer alan bilgiler dogrultusunda islemler yapilmaya baslaniyor. Bu asamada, önce sunucuyu aramasi,baglanmasi, islem yapmasi ve en sonunda baglantinin kapanmasi gerekir.

Biz MySqlConnection sinifinda baglantinin durumunu State özelligi ile yapabiliyoruz. Fakat projelerimizde mysql baglantisinin anlik degisimlerini almak isteyebiliriz.

Örnegin baglanti kurulumu yaparken StatusStrip‘de ayri bir resim gösterip, Baglanti kuruldugunda veya koptugunda ayri bir resim göstermek isteyebiliriz.

Bu gibi bir ihtiyaçta, Mysql sinifinda yer alan StateChange olayini 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 olayini 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) 'Baglanti degisiminde hemen bana haber vermesini sagliyorum.
End Sub

Mysql veritabanina yukaridaki yollardan baglanabiliriz, veri okuma, kaydetme, silme ve update islemleri diger system.data.oledb yani access veritabani islemleriyle ayni burada dikkat etmemiz gereken tek degisiklik;

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

islemlerimizi yukaridaki gibi kullanmak olacaktir.

Örnek olarak mysql veritabanindan okuma islemi yapmak istersek asagidaki gibi islemimizi gerçeklestirebiliriz.

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=sifremiz; database=veritabani 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

Veritabanina baglanmaya çalistigimda almis oldugum iki hatadan bahsetmek istiyorum. ilki;

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

MySql tanimli degil hatasi aliyorum; Bu hatanin çözümünü yanlis dll dosyasi referans ettigimden dolayi kaynaklandigini buldum. Aslinda dll dosyasi yanlis degildi, referans olarak bin klasörü içine dosyalari atmiyordu sadece referans olarak web config dosyasinda gösterme islevini kullaniyordu ama hostuma yolladigim zaman bu hatayi almaktaydim. Web dosyasina referans olarak degilde, bin klasörü içerine dll dosyalarini referans eden dogru dll dosyasini yükleyince sorun çözüldü. ikinci hata ise;

security exception hatasi

bu hatanin çözümüde ise dll dosyasindan kaynaklandi. Aslinda bu sekilde hata vermesinin sebebi kullanmis oldugumuz hosting güvenlik ayarlarinin medium olmasindan kaynaklaniyor. Bizden güvenlik ayarlarimizi Full Trust yapmamizi istiyor ama buda sitemizde güvenlik açigi olusturmak demektir. Bunun çözümünde ise daha önce karsilastigim ve sorunu giderdigim yöntemi kullanmistim. ddl dosyasinin farkli sürümünü yükleyerek bu sorunu gidermistim. Ben Mysql connectionun son sürüm olan dll dosyasini siteme referans etmistim ve sonrasinda bu sorun ile karsilastim ve daha sonra bir alt sürümü yükleyerek sorunum çözüldü. Bu neyden kaynaklaniyor derseniz tam olarak bende bilmiyorum ama dll dosyasindaki bazi ayarlar galiba hostumuzdaki izni olmayan yerleri tetikliyor ve dogal olarak serverimiz böyle bir hata vermektedir.

Bu yazimizda asp.net te mysql veritabanina baglanma ve karsimiza cikabilecek hatalara degindik.

  • 0
  • 2857
  • 0

- BUNLARIDA GÖZDEN GEÇİREBİLİRSİNİZ -

HENÜZ YORUM YAPILMAMIŞ !

Yorum yazın

HAKKIMDA

KONULARI TAKİP EDİN

SOSYAL AĞLAR

  • Mesajınızı Gonderin