欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#使用開(kāi)源驅(qū)動(dòng)連接操作MySQL數(shù)據(jù)庫(kù)

 更新時(shí)間:2015年02月18日 15:11:41   投稿:junjie  
這篇文章主要介紹了C#使用開(kāi)源驅(qū)動(dòng)連接操作MySQL數(shù)據(jù)庫(kù),本文講解使用SourceForge上的mysqldrivercs驅(qū)動(dòng)連接操作MySQL數(shù)據(jù)庫(kù),需要的朋友可以參考下

前面一篇 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),來(lái)自于 Sourceforge 的開(kāi)源驅(qū)動(dòng)。

首先,到 http://sourceforge.net/projects/mysqldrivercs/ 下載,寫(xiě)此篇時(shí)下載的版本是 MySQLDriverCS-n-EasyQueryTools-4.0.1-DotNet2.0.exe。安裝,其中帶有源代碼和例子,只有三個(gè)動(dòng)態(tài)庫(kù) libmySQL-4.0.dll、libmySQL.dll、MySQLDriverCS.dll,光看動(dòng)態(tài)庫(kù)好像不及官版的驅(qū)動(dòng)強(qiáng)大。把安裝目錄中的 MySQLDriverCS.dll 引入到你的 C# 項(xiàng)目中就可以開(kāi)始用了。具體用法還需時(shí)刻關(guān)注安裝目錄中的 help\SDK\Documentation.chm 幫助文檔。

也還是圍繞著這么幾個(gè)問(wèn)題來(lái)展開(kāi):

基本的用法,如連接字符串的寫(xiě)法,基本查詢(xún)操作,大概會(huì)用到哪些類(lèi)
異常的處理
事物的處理
參數(shù)化的查詢(xún)支持

這次我會(huì)在一個(gè)例子中涉及到以上四個(gè)方面,下面這個(gè)片代碼有點(diǎn)混亂,使用時(shí)請(qǐng)讀懂來(lái),然后才能各取所需:

復(fù)制代碼 代碼如下:

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 來(lái)構(gòu)造連接字符串
            //其實(shí)反而有點(diǎn)故弄玄虛,也許是以前直接用連接字符串習(xí)慣了
            MySQLConnectionString conStr = new MySQLConnectionString("localhost", "unmi_db", "unmi", "xxxxxx");
 
            //從 MySQLConnectionStringBuilder 來(lái)看似乎可支持的屬性較少,不知道連接池那些功能怎么樣
            //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 里的
            //看起來(lái)與 AddWithValue() 有異曲同功之妙,比如可寫(xiě)成 com.Parameters.Add(new MySQLParameter("@id",1);
            com.Parameters.Add(paraId);
            com.Parameters.Add(paraName);
 
            //如果是查詢(xún)
            //MySQLDataReader dr = com.ExecuteReaderEx();//執(zhí)行 ExecuteReaderEx() 返回的才是 MySQLDataReader
 
            DbTransaction trans = conn.BeginTransaction(); //開(kāi)啟事物
 
            try
            {
                //com.ExecuteNonQuery();
                //還要執(zhí)行更多的語(yǔ)句時(shí)應(yīng)使用事物
                Console.WriteLine(com.ExecuteScalar().ToString());
                trans.Commit();
            }
            catch (MySQLException ex)
            {
                Console.WriteLine(ex.Message);
                trans.Rollback();
            }
            finally
            {
                conn.Close();
            }
 
            Console.ReadKey();
        }
    }
}

雖說(shuō)那個(gè)驅(qū)動(dòng)文件名中有 DotNet2.0 字樣,應(yīng)該只要是 2.0 及以上的 .Net 運(yùn)行時(shí)就行的,我是在 32 位的 XP 下,Visual Studio 2008 中,用 .Net 3.5 來(lái)跑的,沒(méi)有問(wèn)題。

備注一下,在我家里的電腦上卻是運(yùn)行不起來(lái),提示是:

復(fù)制代碼 代碼如下:

{"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)是能安裝,但用起來(lái)告訴我不行,明擺著是甩我。其實(shí)在下載驅(qū)動(dòng)的網(wǎng)頁(yè)上有注明用了 32 位的各種 Winows 操作系統(tǒng)云云。

最后簡(jiǎn)單說(shuō)下與官版的驅(qū)動(dòng)的少許差異,連接字符串上沒(méi)有官版驅(qū)動(dòng)豐富,且不知對(duì)連接池的支持如何。在用參數(shù)化查詢(xún)?cè)O(shè)置參數(shù)時(shí),雖然比標(biāo)簽的 ADO.Net 方便,便比起官版的可用 AddWithValue() 方法稍微遜色。再就是在 64 位下根本無(wú)法運(yùn)行,這可不能不算是個(gè)致使傷,服務(wù)器下 64 位系統(tǒng)在所難免。

然而這個(gè)開(kāi)源驅(qū)動(dòng)也有些獨(dú)到之處,那就是它提供的 MySQLInsertCommand、MySQLSelectCommand、MySQLUpdateCommand 和 MySQLDeleteCommand 類(lèi)方便了數(shù)據(jù)操作,不需要你顯式的去寫(xiě) SQL 語(yǔ)句,很像 WordPress 的 $wpdb 中相應(yīng)的幾個(gè)函數(shù):$wpdb->insert()、$wpdb->query()、$wpdb->update() 和 $wpdb->delete()。

本不應(yīng)該把這個(gè)驅(qū)動(dòng)這么鮮明的幾個(gè)特性放后面的。大概看下這幾個(gè)函數(shù)的操作:

復(fù)制代碼 代碼如下:

 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" },//要查詢(xún)的字段列表
                new string[] { "Settings" }, // 要查詢(xún)的表,可以多個(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)文章

最新評(píng)論