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: ASP.NET 2.0, blogmotor, MySQL
2 Comments
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.

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