C#连接操作 MySQL 数据库实例(使用官方驱动)
mysql 以其免费和足够的性能受到很大的青睐,当然对于国内小公司,甚至是大公司如果对版权看得薄,敢冒险的话,随便装个 sqlserver、db2、oracle 都行。对于 sqlserver 数据库,因其与 ms 是一家,自然在 .net 类库中有内建支持,假如 mysql 就得找第三方的驱动了 -- .net 中多讲 provider。在这里我也是作为一个预研专题,记录下 c# 连接 mysql 的两种方法,分别使用 mysql 官方的和 sourceforge 上一个开源的 mysql 驱动。至于 odbc 的办法,就不提了,觉得意义不大,同样要安装个 mysql odbc 驱动,而且 odbc 又如此之笨拙。
使用 mysql 官方区动连接操作 mysql 数据库
下载驱动,可在 下载,当前版本是 6.3。你可以选择的平台既可以是 microsoft windows,也可以用 .net & mono 的,区别是 microsoft windows 的是一个msi 文件,后者是非安装的压缩包。但是那个 msi 文件在我的 64 位 xp 下安装不成功,所以用了后者。
这个 connector net 不光是个 mysql 驱动,还提供了像 entity frameword、asp.net web providers、compact framework、vs 2008 集成的支持,还配置 csharp 和 vb 的例子。详细的配置、使用文档请参考安装目录中的 mysql.data.chm 文件。
现在从最简单的例子开始,驱动安装完,或压缩包解开后,甭里安装目录里的 mysql.data.cf.dll、mysql.data.entiry.dll、mysql.visualstudio.dll 和 mysql.web.dll,我们暂时在项目中引入 mysql.data.dll,用 using mysql.data.mysqlclient; 引入命名空间。然后简单的代码如下:
//连接字符串
string connstr = "server=localhost;database=unmicc;uid=unmicc;pwd=xxxxxx;charset=utf8;";
mysqlconnection con = new mysqlconnection(connstr);
con.open();//打开连接
mysqlcommand cmd = new mysqlcommand("select now()",con);
object time = cmd.executescalar(); //或是 cmd.executereader();cmd.executenonquery();
messagebox.show(time.tostring());
//或 console.writeline(time.tostring());
con.close();
上面的连接字符串应该好理解,另外还有更多的配置参数,例如端口号、连接池相关的配置等,具体请参考手册中的 connection options。其他的操作就是标准的 ado.net 的了,再就是可以处理各步骤的异常,catch mysql.data.mysqlclient.mysqlexception 这个类型的异常。其他的用于填充数据的 mysqldataadapter 和 mysqldatareader 也是备好了的。
我想,在做正式的应用时,为防止 sql 注入时关于参数化查询肯定会被提出来的,那就来看看这个 mysql 官方驱动如何处理参数化查询的。它所用的方式和 sqlserver provider 是一样的,用 @author 这样的形式来标识参数,并且同样支持 addwithvalue(string name, object value) 的方式。请看代码:
string sql = "update wp_posts set post_author=@author and post_status=@status where id=@id";
//可以用 ? 号的形式,如,但 ? 号的形式不推荐使用
//string sql = "update wp_posts set post_author=?author and post_status=?status where id=?id";
mysqlcommand cmd = con.createcommand();
cmd.commandtext = sql;
cmd.parameters.addwithvalue("@author", 1);
//cmd.parameters.addwithvalue("?author", 1);
cmd.parameters.addwithvalue("@status", "publish");
//cmd.parameters.addwithvalue("?status", "publish");
cmd.parameters.addwithvalue("@id", 23);
//cmd.parameters.addwithvalue("?id",23);
cmd.executenonquery();
注意到,同时还能用 ?author 的形式来标识参数,不过现在不推荐这么用了,也许是为了统一成 @author 的格式吧。不知道什么时候能像 jdbc 一样,直接用 ? 来作为占位符。
对于 innodb 存储引擎的 mysql 是支持事物的,这个官方的的驱动支持事物的代码如下:
[code]
mysqltransaction trans = con.begintransaction(); //启用事物
trans.commit(); //正常时提交
trans.rollback(); //异常时回滚
[code]
下一篇将介绍如何使用 sourceforge 上的开源 mysql .net 驱动怎么去操作 mysql 数据库的。
推荐阅读
-
C#连接操作 MySQL 数据库实例(使用官方驱动)
-
使用数据库客户端工具Oracle SQL Developer加载第三方驱动连接mysql的方法
-
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
-
shell脚本连接、读写、操作mysql数据库实例
-
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
-
使用数据库客户端工具Oracle SQL Developer加载第三方驱动连接mysql的方法
-
Python MySQLdb模块连接操作mysql数据库实例
-
php使用PDO操作MySQL数据库实例
-
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
-
【⭐】Java—Spring-—数据库操作—使用内置连接池,报读取不到驱动错误。Could not load JDBC driver class。