mégegyszer, utoljára .NET és MySql

a MySQL ODBC-meghajtója egyszerűen nem jó. magyargyűlölő szoftver. a szolgáltatóm supportja azt mondta, hogy csak a kódolást kell rendesen beállítani az adatbázisban és a táblákon UTF-8-ra, azonban az összes lehetséges permutáció végigpróbálgatása után, de még mezőszinten is babrálva, letettem arról, hogy valaha ő és ű karaktereket lássak viszont az oldalon.

a .NET connector működik, viszont van egy komoly szépséghibája, púpos kizárólag full trust módban hajlandó futni. ha valakinek saját szervere van, annak esetleg jó lehet, a web hosting szolgáltatók viszont, a több alkalmazást futtató shared szervereikkel eleve fel sem telepítik. a full trust és a shared szerver sehogysem jön össze, vagy ha mégis, akkor az komoly biztonsági rés: bármelyik alkalmazás hozzáfér bármelyik másik alkalmazás adataihoz. (lásd pl. K. Scott Allen)

jó lenne

ha fenn lenne a .NET connector, akkor nagyjából négy lépésből állna egy primitív oldal elkészítése: 1. bedobni egy SqlDataSource controlt; 2. beállítani rajta, hogy a provider a MySql.Data.MySqlClient, mi a connection string és mi a select command (a képen); 3. bedobni egy data-aware controlt; 4. beállítani rajta, hogy az előbbi SqlDataSource az adatforrása és hogy melyik mezőt jelenítsemeg.

ez kódban körülbelül ennyi:

<asp:sqldatasource
    id="dsBlogEntries" runat="server"
    connectionstring="Database=yourDatabase;Data
    Source=yourServer;User Id=userID;Password=password"
    providername="MySql.Data.MySqlClient"
    selectcommand="SELECT * FROM `blog-entries` ORDER
    BY id DESC"></asp:sqldatasource>

az adatforrás és - a DataList controlt most ugorgyuk át - mellé egy szövegcímke, ami kiírja a blogpost címét:

<h1><asp:label id="titleLabel" runat="server" text='<%# Eval("title") %>'>
</asp:label></h1>

de ezt csak azért mondtam el,

amiért amszterdam is létezik - hogy lássuk, hogy ilyen is van, csak mi nem vagyunk méltóak rá. ezért élünk a budapesti állatkertben.

a manual workaround kalandos kicsit. a .NET lehetőséget nyújt arra, hogy az alkalmazás bin könyvtárában előre lefordított, bináris állományokat tároljunk és hívogassunk meg. szigorúan csak kódból. ha ide, a bin könyvtárba betesszük a mysql hivatalos connectorát és elkezdenénk használni, akkor jutunk el ahhoz a rémesen frusztráló hibaüzenethez, hogy “That assembly does not allow partially trusted callers”. a full és a medium trust, ugye.

de nincs minden veszve. jött pár álarcos hős és visszatolták a döglött lovat a szomszéd telkére. vagyis forrásban töltötték le a MySql AB connectorát, kijavították és elérhetővé tették úgy, hogy a bin medium trustban is fut. mit fut, szakít! ezt a mysql.data.dll-t kell betenni a bin könyvtárba.

azért a vizuális részét el lehet felejteni a dolognak, mivel a szerverre nincsen feltéve a natív kliens és a bin könyvtár dll-jei csak kódból hívhatóak, nincsen értelme SqlDataSource controlt bedobni az oldalba és két kattintással megmondani neki, hogy a MySqlClient a data provider, ezzel csak csak újabb application errorhoz jutunk el. helyette, vagyis a fenti pár soros kód helyett, ez van (primitív megközelítésben, minden cizellálás nélkül):

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
  Handles Me.Load
    Dim conn As MySqlConnection = _
    New MySqlConnection("Server=yourServer;User
      Id=userID;Password=password;Database=yourDatabase;
      Pooling=false;")    Dim strSQL As String = "SELECT * FROM `blog-entries` ORDER BY id DESC;"
    Dim blogDataA As MySqlDataAdapter = New MySqlDataAdapter(strSQL, conn)
    blogDataA.SelectCommand = New MySqlCommand(strSQL, conn)
    Dim ds As DataSet = New DataSet("dsBlog")
    blogDataA.Fill(ds)
    blogMain.DataSource = ds
    blogMain.DataBind()
End Sub

ahol is a blogMain egy DataList control, amiben van többek között a fenti címke is, ami a post címét jeleníti meg.

nem az a baj vele, hogy többet kell gépelni, nem számottevő. inkább az, hogyilyen nyakatekert módon, mondjuk a Page_Load eseményben, vagy a DataList init eseményébenkell ezt kezelni, dizájn helyett - teljesen feleslegesen - kódolni.

Tags: , ,

2 Comments

ecom  on December 14th, 2007

Eddig azt hittem, hogy csak én szivok az ő és ű bettűkkel és a MySql-el. Már látom nem vagyok egyedül.

A saját gépemre windows alatt feltelepitettem egy tesztkörnyezetet. Amin Delphi 7+ ODBC kombinációval megirt applikációkkal végzek adatkarbantartást.

Van egy webtárhelyem, amit szolgáltatótól bérlek linux,PHP,Mysql kombináció.

Azok az ő és ü-betűk amik lokális környezetben még működnek a linux,php környezetben nekem is eltűnnek.

Egy sört megérne a megoldás.

Csaba

moshi  on December 15th, 2007

ez egy elég összetett probléma és azóta sem volt érkezésem a végére járni. annyit tudok, hogy a php4 és php5 teljesen másképp kezeli a unicode karaktereket, így egy verzióváltással eltűnik az összes ékezetes betű, ráadásul ugyanazon verziónál is más az eredmény unix és windows alatt.

máshol eljutottunk odáig, hogy egy php/mysql (utf8) rendszerből közvetlenül felolvasott adat legalább az ő és ű kivételével jól jelenik meg egy w2k3/.net (utf8) rendszerben. már ez is haladás volt.

Leave a Comment