C#使用開源驅(qū)動(dòng)連接操作MySQL數(shù)據(jù)庫
前面一篇 http://www.dbjr.com.cn/article/61219.htm 講了 C# 里用 MySQL 官方驅(qū)動(dòng)怎么去連接操作 MySQL 驅(qū)動(dòng),就是 MySQL 的 JDBC 驅(qū)動(dòng)有兩個(gè)一樣,針對(duì) .NET 的 MySQL 驅(qū)動(dòng)也有兩個(gè)。這里介紹的就是 .NET 連接 MySQL 的第二個(gè)驅(qū)動(dòng),來自于 Sourceforge 的開源驅(qū)動(dòng)。
首先,到 http://sourceforge.net/projects/mysqldrivercs/ 下載,寫此篇時(shí)下載的版本是 MySQLDriverCS-n-EasyQueryTools-4.0.1-DotNet2.0.exe。安裝,其中帶有源代碼和例子,只有三個(gè)動(dòng)態(tài)庫 libmySQL-4.0.dll、libmySQL.dll、MySQLDriverCS.dll,光看動(dòng)態(tài)庫好像不及官版的驅(qū)動(dòng)強(qiáng)大。把安裝目錄中的 MySQLDriverCS.dll 引入到你的 C# 項(xiàng)目中就可以開始用了。具體用法還需時(shí)刻關(guān)注安裝目錄中的 help\SDK\Documentation.chm 幫助文檔。
也還是圍繞著這么幾個(gè)問題來展開:
基本的用法,如連接字符串的寫法,基本查詢操作,大概會(huì)用到哪些類
異常的處理
事物的處理
參數(shù)化的查詢支持
這次我會(huì)在一個(gè)例子中涉及到以上四個(gè)方面,下面這個(gè)片代碼有點(diǎn)混亂,使用時(shí)請(qǐng)讀懂來,然后才能各取所需:
using System;
using System.IO;
using MySQLDriverCS; //引入的命名空間就這個(gè)
using System.Data.Common;
namespace cc.unmi
{
public class Program
{
public static void Main(string[] args)
{
//MySQLDriverCS 有了 MySQLConnectionStringBuilder 和 MySQLConnectionString 來構(gòu)造連接字符串
//其實(shí)反而有點(diǎn)故弄玄虛,也許是以前直接用連接字符串習(xí)慣了
MySQLConnectionString conStr = new MySQLConnectionString("localhost", "unmi_db", "unmi", "xxxxxx");
//從 MySQLConnectionStringBuilder 來看似乎可支持的屬性較少,不知道連接池那些功能怎么樣
//string connStr = "Data Source=unmi_db;Password=xxxxxx;User ID=unmi;Location=localhost;Port=3306;Extended Properties=";
MySQLConnection conn = new MySQLConnection(conStr.AsString); //或 new MySQLConnection(connStr);
conn.Open();
//參數(shù)用 @, 同樣支持 ? 的方式, 應(yīng)該也是不推薦用 ? 的形式
//string sql = "update wp_options set option_value='http://unmi.cc' where option_id=?id and <a href="mailto:option_name=@name">option_name=@name</a>";
string sql = "select option_name from wp_options where option_id=?id and <a href="mailto:option_name=@name">option_name=@name</a>";
MySQLCommand com = new MySQLCommand(sql, conn);
MySQLParameter paraId = new MySQLParameter("?id", 1);
MySQLParameter paraName = new MySQLParameter("@name", "siteurl");
//其實(shí)是加在 MySQLParameterCollection 里的
//看起來與 AddWithValue() 有異曲同功之妙,比如可寫成 com.Parameters.Add(new MySQLParameter("@id",1);
com.Parameters.Add(paraId);
com.Parameters.Add(paraName);
//如果是查詢
//MySQLDataReader dr = com.ExecuteReaderEx();//執(zhí)行 ExecuteReaderEx() 返回的才是 MySQLDataReader
DbTransaction trans = conn.BeginTransaction(); //開啟事物
try
{
//com.ExecuteNonQuery();
//還要執(zhí)行更多的語句時(shí)應(yīng)使用事物
Console.WriteLine(com.ExecuteScalar().ToString());
trans.Commit();
}
catch (MySQLException ex)
{
Console.WriteLine(ex.Message);
trans.Rollback();
}
finally
{
conn.Close();
}
Console.ReadKey();
}
}
}
雖說那個(gè)驅(qū)動(dòng)文件名中有 DotNet2.0 字樣,應(yīng)該只要是 2.0 及以上的 .Net 運(yùn)行時(shí)就行的,我是在 32 位的 XP 下,Visual Studio 2008 中,用 .Net 3.5 來跑的,沒有問題。
備注一下,在我家里的電腦上卻是運(yùn)行不起來,提示是:
{"Could not load file or assembly 'MySQLDriverCS, Version=3.0.1735.36021, Culture=neutral, PublicKeyToken=172f94dfb0faf263' or one of its dependencies. An attempt was made to load a program with an incorrect format."}
又是我那可惡的 64 位 XP,它只能支持 32 位的應(yīng)用,與官版的驅(qū)動(dòng)表現(xiàn)不一樣。官版的 MSI 程序不能在我的 64 位系統(tǒng)下安裝,但安裝包中的 .dll 是可在 64 位下用。而這個(gè)版本的驅(qū)動(dòng)是能安裝,但用起來告訴我不行,明擺著是甩我。其實(shí)在下載驅(qū)動(dòng)的網(wǎng)頁上有注明用了 32 位的各種 Winows 操作系統(tǒng)云云。
最后簡單說下與官版的驅(qū)動(dòng)的少許差異,連接字符串上沒有官版驅(qū)動(dòng)豐富,且不知對(duì)連接池的支持如何。在用參數(shù)化查詢?cè)O(shè)置參數(shù)時(shí),雖然比標(biāo)簽的 ADO.Net 方便,便比起官版的可用 AddWithValue() 方法稍微遜色。再就是在 64 位下根本無法運(yùn)行,這可不能不算是個(gè)致使傷,服務(wù)器下 64 位系統(tǒng)在所難免。
然而這個(gè)開源驅(qū)動(dòng)也有些獨(dú)到之處,那就是它提供的 MySQLInsertCommand、MySQLSelectCommand、MySQLUpdateCommand 和 MySQLDeleteCommand 類方便了數(shù)據(jù)操作,不需要你顯式的去寫 SQL 語句,很像 WordPress 的 $wpdb 中相應(yīng)的幾個(gè)函數(shù):$wpdb->insert()、$wpdb->query()、$wpdb->update() 和 $wpdb->delete()。
本不應(yīng)該把這個(gè)驅(qū)動(dòng)這么鮮明的幾個(gè)特性放后面的。大概看下這幾個(gè)函數(shù)的操作:
new MySQLInsertCommand(
dbCon,//連接
new object[,] { //字段名及對(duì)應(yīng)值
{"SettingID",100},
{"SettingValue","http://www.dbjr.com.cn"}
},
"Settings" //表名
); //new 后即執(zhí)行,可用 bSuccess 與 Query 屬性分別獲得成功與否及相應(yīng)的 SQL
//這個(gè) MySQLSelectCommand 有點(diǎn)讓人蛋疼,還不如直接 SQL 痛快
DataTable dt = new MySQLSelectCommand(dbCon, //連接
new string[] { "SettingID", "SettingValue" },//要查詢的字段列表
new string[] { "Settings" }, // 要查詢的表,可以多個(gè)
new object[,] { { "SettingID", "=", 100 } },//條件
null,
null //后面還可以有 limit, distinct 等指令及參數(shù)
).Table; //獲得 DataTable
//更新時(shí)用這種方式還算方便
new MySQLUpdateCommand(dbCon,
new object[,] { { "SettingValue", "http://www.dbjr.com.cn" } },
"Settings",
new object[,] { { "SettingID", "=", 100 } },
null
); //new 后即執(zhí)行,可用 bSuccess 與 Query 屬性分別獲得成功與否及相應(yīng)的 SQL
//參數(shù)與 MySQLUpdateCommand 的后四個(gè)相同
new MySQLDeleteCommand(dbCon, "Trash", null, null);
相關(guān)文章
C#實(shí)現(xiàn)統(tǒng)計(jì)字?jǐn)?shù)功能的方法
這篇文章主要介紹了C#實(shí)現(xiàn)統(tǒng)計(jì)字?jǐn)?shù)功能的方法,較為詳細(xì)的分析了C#字?jǐn)?shù)統(tǒng)計(jì)功能的原理與實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08C#實(shí)現(xiàn)將網(wǎng)址生成二維碼圖片方法介紹
這篇文章介紹了C#實(shí)現(xiàn)將網(wǎng)址生成二維碼圖片的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04C#靜態(tài)構(gòu)造函數(shù)用法實(shí)例分析
這篇文章主要介紹了C#靜態(tài)構(gòu)造函數(shù)用法,以實(shí)例形式較為詳細(xì)的分析了C#靜態(tài)構(gòu)造函數(shù)的用途、實(shí)現(xiàn)方法及使用技巧,需要的朋友可以參考下2015-06-06C# WebService創(chuàng)建、發(fā)布、調(diào)用的實(shí)例講解
下面小編就為大家分享一篇C# WebService創(chuàng)建、發(fā)布、調(diào)用的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12基于C#實(shí)現(xiàn)語音識(shí)別功能詳解
在.NET4.0中,可以借助System.Speech組件讓電腦來識(shí)別我們的聲音。本文將利用該組件實(shí)現(xiàn)語音識(shí)別功能,文中實(shí)現(xiàn)過程講解詳細(xì),需要的可以參考一下2022-04-04Unity3D Shader實(shí)現(xiàn)流光效果
這篇文章主要為大家詳細(xì)介紹了Unity3D Shader實(shí)現(xiàn)流光效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04C#獲取鼠標(biāo)在listview右鍵點(diǎn)擊單元格的內(nèi)容方法
下面小編就為大家?guī)硪黄狢#獲取鼠標(biāo)在listview右鍵點(diǎn)擊單元格的內(nèi)容方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01C#打包部署并把.net framework框架打到安裝包的方法步驟
打包c(diǎn)#程序時(shí),有時(shí)需要添加.net framework組件到安裝包,本文就來介紹一下C#打包部署并把.net framework框架打到安裝包的方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10