The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

.NET 如何連接舊版的 MySQL 4.0 並透過 ADO.NET 操作資料

幾個月前曾經做一個系統整合的案子,要整合客戶內部的系統並提供新服務,進一步瞭解後才發現他們用的資料庫竟然是多年前的 MySQL 4.0 版,這個版本在官方早就不支援了,而且也無法下載的到任何檔案,所以我光是要設立開發環境都還有點困難,還好我有在義守大學的檔案伺服器找到舊版的 MySQL 伺服器

但重點是我的 .NET 應用程式必須要能連接他們的資料庫才能完成新服務的開發,因此也找了幾套可以連接 MySQL 的類別庫套件,我首先先嘗試使用官方的 MySQL Connector/Net 的各版本來測試,不過因為 MySQL 4.0 是不支援 Unicode 特性的,而 .NET 卻是一個完全以 Unicode 為基礎的開發環境,測試的過程中遇到許多問題,最後終於放棄。

我另外找到一套開放原始碼的 MySQL Drivers for .NET 可以有效的處理中文問題,他會將從 MySQL 4.0 資料庫中的資料適當的轉成 .NET 可以讀取的字串資料,進而讓我們開發的系統能夠正常運作,算是一個蠻不錯的解決方案。只是,不使用 Unicode 而衍生的老問題在這裡一樣還是會發生,也就是「許功蓋」的問題,不過這也是難以避免的,所以也是必須勉強接���。

以下是我使用 MySQLDriverCS 所寫出來的程式碼範例:

string host = System.Web.Configuration.WebConfigurationManager.AppSettings["MySQL_Host"];
string user = System.Web.Configuration.WebConfigurationManager.AppSettings["MySQL_User"];
string pass = System.Web.Configuration.WebConfigurationManager.AppSettings["MySQL_Pass"];
string dbname = System.Web.Configuration.WebConfigurationManager.AppSettings["MySQL_DBName"];

using (MySQLConnection conn = new MySQLConnection(
                new MySQLConnectionString(host, dbname, user, pass).AsString))
{
    string strSQL = "SELECT * FROM products WHERE id=@ID LIMIT 1";

    // 準備 MySQLCommand
    MySQLCommand cmd = new MySQLCommand(strSQL, conn);

    // 產品編號
    MySQLParameter p1 = new MySQLParameter("@ID", DbType.String);
    p1.Size = 12;
    p1.Value = "ESC0023";
    cmd.Parameters.Add(p1);

    // MySQLDataAdapter ( 使用 MySQLDataAdapter 會自動開啟資料庫連線 )
    MySQLDataAdapter ta = new MySQLDataAdapter(cmd);
    ta.Fill(dt);

    cmd.Dispose();
    conn.Close();
}

我並沒有測試過使用 MySQLDriverCS 連接 MySQL 4.1/5.0 資料庫,如果有人有時間測試的話,可以留言給我,謝謝。

相關連結