由於富有競爭力的價格和便於使用,MySQL在市場佔有率方面逐步提升。開放原始碼社區為了擴充MySQL的使用範圍,開發出了.Net架構(.NET Framework)中可以使用的資料庫連接器。我們就來學習一下如何在.Net應用程式中使用MySQL。
和.NET的資料整合
MySQL 社區已經開發出了MySQL的資料介面,他提供了串連資料來源和程式碼的準系統。在Windows平台上,有如下的MySQL連接器:
- MySQL Connector/Net 1.0 (之前被稱為ByteFX.Data):是一個為MySQL設計的開放原始碼.NET資料介面。它是完全用C#來開發的,我們可以在在 MySQL.com網站上找到它。(注意:在本文的例子中,我們都會使用MySQL Connector/Net 1.0這個資料介面來串連資料庫,利用Windows安裝程式即可輕易安裝它,它的代碼執行個體和文檔也包含其中。)
- MySQLDirect .NET Data Provider: 是一個由 Core Lab 開發的商業資料介面。他的價格由購買的許可證的類型決定,但是我們可以下載它的試用版。
如果你使用 Mono,那麼在 Mono網站上可以找到PHP連接器的下載。如果你在Windows平台上運行Mono的話,你下載的連接器包含了安裝程式。如果不是的話,那就要根據你的作業系統的種類去下載合適的連接器了。
使用MySQL資料介面
安裝好MySQL的資料介面後,你必須在你的代碼中引入它才能使用。你可以使用 MySql.Data.MySqlClient這個名空間來串連 MySQL 伺服器。在C#中,可以使用using語句來引入MySQL資料介面:
using MySql.Data.MySqlClient; |
另外,你也可以在一個ASP.NET的網頁表單(Web Form)中通過使用匯入(Import)指令來引入MySQL資料介面:
或者,你也可以在你的代碼裡在使用這個名空間時,寫全一個類的完整路徑,但是這樣的話會比使用Import指令來匯入輸入更多的字元,浪費更多的位元組。指定了名空間後,我們就可以和MySQL資料庫進行資料互動了。MySql.Data.MySqlClient這個名空間提供了許多用於處理MySQL資料的類。下面是這些類的一個樣本:
- MySqlConnection: 管理和 MySQL 伺服器/資料庫的串連;
- MySqlDataAdapter: 一套用於填充DataSet對象和更新MySQL資料庫的命令和串連的集合;
- MySqlDataReader: 讓你能夠從一個MySQL資料庫讀取資料。它是一個單向的資料流;
- MySqlCommand: 提供向資料庫伺服器發送指令的功能;
- MySqlException: 當發生問題時提供例外處理。
串連MySQL資料庫
使用MySQL資料庫的第一步是要通過MySQLConnection類和資料庫建立串連。通過一個串連字串,MySqlConnection 將會被執行個體化成一個樣本。連接字串將告訴代碼到哪裡去找MySQL伺服器以及其他一些選項。
一個串連字串告訴代碼使用指定的使用者名稱和密碼去串連一個名為MySQLTestServer的MySQL伺服器,並進入techrepublic資料庫。我在我的測試機上設定了允許匿名登陸(這樣的設定有非常大的安全性漏洞,所以不建議你在生產伺服器上也這麼做),所以在範例中將會使用如下的串連字串:
"server=localhost; database=sitepoint;" |
指定了串連字串後,MySqlConnection對象的Open方法就被調用並開啟串連。串連建立後,你就可以給MySQL資料庫發送命令或從資料庫獲得資料了。
ASP.NET和MySQL的組合
讓我們更深入的討論一下結合MySqlConnection類和其他的類來產生一個MySQL伺服器上的資料庫列表。表 B列出了一個使用C#寫的ASP.NET的網頁表單。它建立了一個串連,接著給伺服器下了一個指令(SHOW DATABASES),然後通過MySqlReader對象把結果顯示出來。
用 MySqlCommand 對象向MySQL伺服器發送 SHOW DATABASES 命令和直接在 MySQL 管理工具中輸入這個命令得結果是一樣的。唯一的區別是,我們在代碼中必須使用另一個對象來擷取結果集。MySqlDataReader 對象在擷取結果時被執行個體化(通過 MySqlCommand 類的 ExecuteReader 方法)。MySqlDataReader 對象的 GetString 方法被用於通過ASP.NET的標籤控制來顯示結果集中的資料。GetString 方法的指標0指定了顯示結果集的當前行(在while迴圈中)的第一列資料。
Mono提示
如果你使用開放原始碼的Mono開發平台,例子中的代碼只需要做小小的改動就能正常的運行。MySQL的資料介面在 ByteFX.Data.MySqlClient 這個空間名裡,而不是Windows上的MySql.Data.MySqlClient空間名。事實上 MySQL 的資料介面原來是由 ByteFX公司開發的,但是後被MySQL公司收購。所以如果你使用Mono的話,你必須這樣聲明空間名:
using ByteFX.Data.MySqlClient; |
MySQL 和 .NET 的組合提供了一個強大的開發平台。MySQL在開源社區得到了強大的支援人員,.NET也通過 Mono 而被開放原始碼社區所接受。這樣的組合提供了一個在Windows,及其他語言如UNIX或Linux,環境下高度靈活的開發平台。