開放源代碼社區(qū)為了擴(kuò)展mysql的使用范圍,開發(fā)出了.net框架(.net framework)中可以使用的數(shù)據(jù)庫連接器。我們就來學(xué)習(xí)一下如何在.net應(yīng)用程序中使用mysql。
由于富有競爭力的價(jià)格和易于使用,mysql在市場占有率方面逐步提升。開放源代碼社區(qū)為了擴(kuò)展mysql的使用范圍,開發(fā)出了.net框架(.net framework)中可以使用的數(shù)據(jù)庫連接器。我們就來學(xué)習(xí)一下如何在.net應(yīng)用程序中使用mysql。
每周三發(fā)布的techrepublic的.net通訊,包含有網(wǎng)絡(luò)服務(wù), asp.net, ado.net, 和 visual studio .net相關(guān)的實(shí)用技巧與代碼實(shí)例. 現(xiàn)在就自動訂閱!
mysql漸漸的成為了在選擇數(shù)據(jù)庫平臺時一個切實(shí)可行的數(shù)據(jù)庫方案。能夠證明這一點(diǎn)的就是許多公司都選擇mysql作為他們的數(shù)據(jù)庫平臺,例如 google、美聯(lián)社(the associated press) 以及美國國家航空宇航局( nasa)。雖然對于一個開放源代碼來說,低廉的價(jià)格常常被當(dāng)作主要優(yōu)點(diǎn)來說服客戶,但是對于象google那樣的大規(guī)模的組織來說,他們不會放心的把非常有用的信息存放在一個只有價(jià)格優(yōu)勢的數(shù)據(jù)庫產(chǎn)品中。mysql真正的實(shí)力遠(yuǎn)遠(yuǎn)的超過了他的價(jià)格優(yōu)勢,他提供了豐富的來自開放源代碼社區(qū)和商業(yè)化的附加工具。
和.net的數(shù)據(jù)整合
mysql 社區(qū)已經(jīng)開發(fā)出了mysql的數(shù)據(jù)接口,他提供了連接數(shù)據(jù)源和程序代碼的基本功能。在windows平臺上,有如下的mysql連接器:
* mysql connector/net 1.0 (之前被稱為bytefx.data):是一個為mysql設(shè)計(jì)的開放源代碼.net數(shù)據(jù)接口。它是完全用c#來開發(fā)的,我們可以在在 mysql.com網(wǎng)站上找到它。(注意:在本文的例子中,我們都會使用mysql connector/net 1.0這個數(shù)據(jù)接口來連接數(shù)據(jù)庫,利用windows安裝程序即可輕易安裝它,它的代碼實(shí)例和文檔也包含其中。)
* mysqldirect .net data provider: 是一個由 core lab 開發(fā)的商業(yè)數(shù)據(jù)接口。他的價(jià)格由購買的許可證的類型決定,但是我們可以下載它的試用版。
如果你使用 mono,那么在 mono網(wǎng)站上可以找到php連接器的下載。如果你在windows平臺上運(yùn)行mono的話,你下載的連接器包含了安裝程序。如果不是的話,那就要根據(jù)你的操作系統(tǒng)的種類去下載合適的連接器了。
使用mysql數(shù)據(jù)接口
安裝好mysql的數(shù)據(jù)接口后,你必須在你的代碼中引入它才能使用。你可以使用 mysql.data.mysqlclient這個名空間來連接 mysql 服務(wù)器。在c#中,可以使用using語句來引入mysql數(shù)據(jù)接口:
using mysql.data.mysqlclient;
另外,你也可以在一個asp.net的網(wǎng)頁表單(web form)中通過使用導(dǎo)入(import)指令來引入mysql數(shù)據(jù)接口:
或者,你也可以在你的代碼里在使用這個名空間時,寫全一個類的完整路徑,但是這樣的話會比使用import指令來導(dǎo)入輸入更多的字符,浪費(fèi)更多的字節(jié)。指定了名空間后,我們就可以和mysql數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交互了。 mysql.data.mysqlclient這個名空間提供了許多用于處理mysql數(shù)據(jù)的類。下面是這些類的一個樣本:
* mysqlconnection: 管理和 mysql 服務(wù)器/數(shù)據(jù)庫的連接;
* mysqldataadapter: 一套用于填充dataset對象和更新mysql數(shù)據(jù)庫的命令和連接的集合;
* mysqldatareader: 讓你能夠從一個 mysql 數(shù)據(jù)庫讀取數(shù)據(jù)。它是一個單向的數(shù)據(jù)流;
* mysqlcommand: 提供向數(shù)據(jù)庫服務(wù)器發(fā)送指令的功能;
* mysqlexception: 當(dāng)發(fā)生問題時提供例外處理。
我們會使用其中的一些類去和我們的范例數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交互。
連接 mysql 數(shù)據(jù)庫
使用mysql數(shù)據(jù)庫的第一步是要通過mysqlconnection類和數(shù)據(jù)庫建立連接。通過一個連接字串,mysqlconnection 將會被實(shí)例化成一個示例。連接字符串將告訴代碼到哪里去找mysql服務(wù)器以及其他一些選項(xiàng)。
一個連接字串告訴代碼使用指定的用戶名和密碼去連接一個名為mysqltestserver的mysql服務(wù)器,并進(jìn)入techrepublic數(shù)據(jù)庫。我在我的測試機(jī)上設(shè)定了允許匿名登陸(這樣的設(shè)定有非常大的安全漏洞,所以不建議你在生產(chǎn)服務(wù)器上也這么做),所以在范例中將會使用如下的連接字串:
"server=localhost; database=sitepoint;"
指定了連接字串后, mysqlconnection 對象的open方法就被調(diào)用并打開連接。連接建立后,你就可以給mysql數(shù)據(jù)庫發(fā)送命令或從數(shù)據(jù)庫獲得數(shù)據(jù)了。
asp.net和mysql的組合
讓我們更深入的討論一下結(jié)合mysqlconnection類和其他的類來生成一個mysql服務(wù)器上的數(shù)據(jù)庫列表。表 b列出了一個使用c#寫的asp.net的網(wǎng)頁表單。它建立了一個連接,接著給服務(wù)器下了一個指令(show databases),然后通過mysqlreader對象把結(jié)果顯示出來。
用 mysqlcommand 對象向mysql服務(wù)器發(fā)送 show databases 命令和直接在 mysql 管理工具中輸入這個命令得結(jié)果是一樣的。唯一的區(qū)別是,我們在代碼中必須使用另一個對象來獲取結(jié)果集。mysqldatareader 對象在獲取結(jié)果時被實(shí)例化(通過 mysqlcommand 類的 executereader 方法)。mysqldatareader 對象的 getstring 方法被用于通過asp.net的標(biāo)簽控制來顯示結(jié)果集中的數(shù)據(jù)。getstring 方法的指針0指定了顯示結(jié)果集的當(dāng)前行(在while循環(huán)中)的第一列數(shù)據(jù)。
mono提示
如果你使用開放源代碼的mono開發(fā)平臺,例子中的代碼只需要做小小的改動就能正常的運(yùn)行。mysql的數(shù)據(jù)接口在 bytefx.data.mysqlclient 這個空間名里,而不是windows上的mysql.data.mysqlclient空間名。事實(shí)上 mysql 的數(shù)據(jù)接口原來是由 bytefx公司開發(fā)的,但是后被mysql公司收購。所以如果你使用mono的話,你必須這樣聲明空間名:
using bytefx.data.mysqlclient;
結(jié)語
新聞熱點(diǎn)
疑難解答
圖片精選