前面一篇 //www.jb51.net/article/61219.htm 讲了 c# 里用 mysql 官方驱动怎么去连接操作 mysql 驱动,就是 mysql 的 jdbc 驱动有两个一样,针对 .net 的 mysql 驱动也有两个。这里介绍的就是 .net 连接 mysql 的第二个驱动,来自于 sourceforge 的开源驱动。
首先,到 http://sourceforge.net/projects/mysqldrivercs/ 下载,写此篇时下载的版本是 mysqldrivercs-n-easyquerytools-4.0.1-dotnet2.0.exe。安装,其中带有源代码和例子,只有三个动态库 libmysql-4.0.dll、libmysql.dll、mysqldrivercs.dll,光看动态库好像不及官版的驱动强大。把安装目录中的 mysqldrivercs.dll 引入到你的 c# 项目中就可以开始用了。具体用法还需时刻关注安装目录中的 help\sdk\documentation.chm 帮助文档。
也还是围绕着这么几个问题来展开:
基本的用法,如连接字符串的写法,基本查询操作,大概会用到哪些类
异常的处理
事物的处理
参数化的查询支持
这次我会在一个例子中涉及到以上四个方面,下面这个片代码有点混乱,使用时请读懂来,然后才能各取所需:
using system;
using system.io;
using mysqldrivercs; //引入的命名空间就这个
using system.data.common;
namespace cc.unmi
{
public class program
{
public static void main(string[] args)
{
//mysqldrivercs 有了 mysqlconnectionstringbuilder 和 mysqlconnectionstring 来构造连接字符串
//其实反而有点故弄玄虚,也许是以前直接用连接字符串习惯了
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();
//参数用 @, 同样支持 ? 的方式, 应该也是不推荐用 ? 的形式
//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");
//其实是加在 mysqlparametercollection 里的
//看起来与 addwithvalue() 有异曲同功之妙,比如可写成 com.parameters.add(new mysqlparameter("@id",1);
com.parameters.add(paraid);
com.parameters.add(paraname);
//如果是查询
//mysqldatareader dr = com.executereaderex();//执行 executereaderex() 返回的才是 mysqldatareader
dbtransaction trans = conn.begintransaction(); //开启事物
try
{
//com.executenonquery();
//还要执行更多的语句时应使用事物
console.writeline(com.executescalar().tostring());
trans.commit();
}
catch (mysqlexception ex)
{
console.writeline(ex.message);
trans.rollback();
}
finally
{
conn.close();
}
console.readkey();
}
}
}
虽说那个驱动文件名中有 dotnet2.0 字样,应该只要是 2.0 及以上的 .net 运行时就行的,我是在 32 位的 xp 下,visual studio 2008 中,用 .net 3.5 来跑的,没有问题。
备注一下,在我家里的电脑上却是运行不起来,提示是:
{"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 位的应用,与官版的驱动表现不一样。官版的 msi 程序不能在我的 64 位系统下安装,但安装包中的 .dll 是可在 64 位下用。而这个版本的驱动是能安装,但用起来告诉我不行,明摆着是甩我。其实在下载驱动的网页上有注明用了 32 位的各种 winows 操作系统云云。
最后简单说下与官版的驱动的少许差异,连接字符串上没有官版驱动丰富,且不知对连接池的支持如何。在用参数化查询设置参数时,虽然比标签的 ado.net 方便,便比起官版的可用 addwithvalue() 方法稍微逊色。再就是在 64 位下根本无法运行,这可不能不算是个致使伤,服务器下 64 位系统在所难免。
然而这个开源驱动也有些独到之处,那就是它提供的 mysqlinsertcommand、mysqlselectcommand、mysqlupdatecommand 和 mysqldeletecommand 类方便了数据操作,不需要你显式的去写 sql 语句,很像 wordpress 的 $wpdb 中相应的几个函数:$wpdb->insert()、$wpdb->query()、$wpdb->update() 和 $wpdb->delete()。
本不应该把这个驱动这么鲜明的几个特性放后面的。大概看下这几个函数的操作:
new mysqlinsertcommand(
dbcon,//连接
new object[,] { //字段名及对应值
{"settingid",100},
{"settingvalue","//www.jb51.net"}
},
"settings" //表名
); //new 后即执行,可用 bsuccess 与 query 属性分别获得成功与否及相应的 sql
//这个 mysqlselectcommand 有点让人蛋疼,还不如直接 sql 痛快
datatable dt = new mysqlselectcommand(dbcon, //连接
new string[] { "settingid", "settingvalue" },//要查询的字段列表
new string[] { "settings" }, // 要查询的表,可以多个
new object[,] { { "settingid", "=", 100 } },//条件
null,
null //后面还可以有 limit, distinct 等指令及参数
).table; //获得 datatable
//更新时用这种方式还算方便
new mysqlupdatecommand(dbcon,
new object[,] { { "settingvalue", "//www.jb51.net" } },
"settings",
new object[,] { { "settingid", "=", 100 } },
null
); //new 后即执行,可用 bsuccess 与 query 属性分别获得成功与否及相应的 sql
//参数与 mysqlupdatecommand 的后四个相同
new mysqldeletecommand(dbcon, "trash", null, null);
如对本文有疑问,
点击进行留言回复!!
相关文章:
-
-
C#实现猜数字游戏
本文实例为大家分享了c#实现猜数字游戏具体代码,供大家参考,具体内容如下给定一个0-100的随机数字猜其大小题目样式:电脑产生一个0到100之间的随机数字,并且...
[阅读全文]
-
-
C# 可空类型的具体使用
在项目中我们经常会遇到可为空类型,那么到底什么是可为空类型呢?下面我们将从4个方面为大家剖析。1、可空类型基础知识顾名思义,可空类型指的就是某个对象类型可以为空...
[阅读全文]
-
-
-
C#实现猜数字小游戏
本文实例为大家分享了c#实现猜数字小游戏的具体代码,供大家参考,具体内容如下效果如图:代码:using system;using system.collecti...
[阅读全文]
-
-
C#实现简单俄罗斯方块
最近在看《.net游戏编程入门经典 c#篇》 第一章介绍了如何制作俄罗斯方块,自己试了试按照书上的步骤,可算是完成了。于是写下这篇文章留作纪念。1.类的设计在充...
[阅读全文]
-
-
网友评论