C#使用开源驱动连接操作MySQL数据库
前面一篇https://www.nhooo.com/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帮助文档。
也还是围绕着这么几个问题来展开:
基本的用法,如连接字符串的写法,基本查询操作,大概会用到哪些类
异常的处理
事物的处理
参数化的查询支持
这次我会在一个例子中涉及到以上四个方面,下面这个片代码有点混乱,使用时请读懂来,然后才能各取所需:
usingSystem;
usingSystem.IO;
usingMySQLDriverCS;//引入的命名空间就这个
usingSystem.Data.Common;
namespacecc.unmi
{
publicclassProgram
{
publicstaticvoidMain(string[]args)
{
//MySQLDriverCS有了MySQLConnectionStringBuilder和MySQLConnectionString来构造连接字符串
//其实反而有点故弄玄虚,也许是以前直接用连接字符串习惯了
MySQLConnectionStringconStr=newMySQLConnectionString("localhost","unmi_db","unmi","xxxxxx");
//从MySQLConnectionStringBuilder来看似乎可支持的属性较少,不知道连接池那些功能怎么样
//stringconnStr="DataSource=unmi_db;Password=xxxxxx;UserID=unmi;Location=localhost;Port=3306;ExtendedProperties=";
MySQLConnectionconn=newMySQLConnection(conStr.AsString);//或newMySQLConnection(connStr);
conn.Open();
//参数用@,同样支持?的方式,应该也是不推荐用?的形式
//stringsql="updatewp_optionssetoption_value='http://unmi.cc'whereoption_id=?idand<ahref="mailto:option_name=@name">option_name=@name</a>";
stringsql="selectoption_namefromwp_optionswhereoption_id=?idand<ahref="mailto:option_name=@name">option_name=@name</a>";
MySQLCommandcom=newMySQLCommand(sql,conn);
MySQLParameterparaId=newMySQLParameter("?id",1);
MySQLParameterparaName=newMySQLParameter("@name","siteurl");
//其实是加在MySQLParameterCollection里的
//看起来与AddWithValue()有异曲同功之妙,比如可写成com.Parameters.Add(newMySQLParameter("@id",1);
com.Parameters.Add(paraId);
com.Parameters.Add(paraName);
//如果是查询
//MySQLDataReaderdr=com.ExecuteReaderEx();//执行ExecuteReaderEx()返回的才是MySQLDataReader
DbTransactiontrans=conn.BeginTransaction();//开启事物
try
{
//com.ExecuteNonQuery();
//还要执行更多的语句时应使用事物
Console.WriteLine(com.ExecuteScalar().ToString());
trans.Commit();
}
catch(MySQLExceptionex)
{
Console.WriteLine(ex.Message);
trans.Rollback();
}
finally
{
conn.Close();
}
Console.ReadKey();
}
}
}
虽说那个驱动文件名中有DotNet2.0字样,应该只要是2.0及以上的.Net运行时就行的,我是在32位的XP下,VisualStudio2008中,用.Net3.5来跑的,没有问题。
备注一下,在我家里的电脑上却是运行不起来,提示是:
{"Couldnotloadfileorassembly'MySQLDriverCS,Version=3.0.1735.36021,Culture=neutral,PublicKeyToken=172f94dfb0faf263'oroneofitsdependencies.Anattemptwasmadetoloadaprogramwithanincorrectformat."}
又是我那可恶的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()。
本不应该把这个驱动这么鲜明的几个特性放后面的。大概看下这几个函数的操作:
newMySQLInsertCommand(
dbCon,//连接
newobject[,]{//字段名及对应值
{"SettingID",100},
{"SettingValue","https://www.nhooo.com"}
},
"Settings"//表名
);//new后即执行,可用bSuccess与Query属性分别获得成功与否及相应的SQL
//这个MySQLSelectCommand有点让人蛋疼,还不如直接SQL痛快
DataTabledt=newMySQLSelectCommand(dbCon,//连接
newstring[]{"SettingID","SettingValue"},//要查询的字段列表
newstring[]{"Settings"},//要查询的表,可以多个
newobject[,]{{"SettingID","=",100}},//条件
null,
null//后面还可以有limit,distinct等指令及参数
).Table;//获得DataTable
//更新时用这种方式还算方便
newMySQLUpdateCommand(dbCon,
newobject[,]{{"SettingValue","https://www.nhooo.com"}},
"Settings",
newobject[,]{{"SettingID","=",100}},
null
);//new后即执行,可用bSuccess与Query属性分别获得成功与否及相应的SQL
//参数与MySQLUpdateCommand的后四个相同
newMySQLDeleteCommand(dbCon,"Trash",null,null);