C#连接操作 MySQL 数据库实例(使用官方驱动)
MySQL以其免费和足够的性能受到很大的青睐,当然对于国内小公司,甚至是大公司如果对版权看得薄,敢冒险的话,随便装个SqlServer、DB2、Oracle都行。对于SqlServer数据库,因其与MS是一家,自然在.net类库中有内建支持,假如MySQL就得找第三方的驱动了--.net中多讲Provider。在这里我也是作为一个预研专题,记录下C#连接MySQL的两种方法,分别使用MySQL官方的和SourceForge上一个开源的MySQL驱动。至于ODBC的办法,就不提了,觉得意义不大,同样要安装个MySQLODBC驱动,而且ODBC又如此之笨拙。
使用MySQL官方区动连接操作MySQL数据库
下载驱动,可在http://www.mysql.com/downloads/connector/net/6.3.html#downloads下载,当前版本是6.3。你可以选择的平台既可以是MicrosoftWindows,也可以用.Net&Mono的,区别是MicrosoftWindows的是一个MSI文件,后者是非安装的压缩包。但是那个MSI文件在我的64位XP下安装不成功,所以用了后者。
这个connectornet不光是个MySQL驱动,还提供了像EntityFrameword、Asp.NetWebProviders、CompactFramework、VS2008集成的支持,还配置CSharp和VB的例子。详细的配置、使用文档请参考安装目录中的MySql.Data.chm文件。
现在从最简单的例子开始,驱动安装完,或压缩包解开后,甭里安装目录里的mysql.data.cf.dll、mysql.data.entiry.dll、mysql.visualstudio.dll和mysql.web.dll,我们暂时在项目中引入mysql.data.dll,用usingMySql.Data.MySqlClient;引入命名空间。然后简单的代码如下:
//连接字符串 stringconnStr="Server=localhost;Database=unmicc;Uid=unmicc;Pwd=xxxxxx;CharSet=utf8;"; MySqlConnectioncon=newMySqlConnection(connStr); con.Open();//打开连接 MySqlCommandcmd=newMySqlCommand("selectnow()",con); objecttime=cmd.ExecuteScalar();//或是cmd.ExecuteReader();cmd.ExecuteNonQuery(); MessageBox.Show(time.ToString()); //或Console.WriteLine(time.ToString()); con.Close();
上面的连接字符串应该好理解,另外还有更多的配置参数,例如端口号、连接池相关的配置等,具体请参考手册中的ConnectionOptions。其他的操作就是标准的ADO.NET的了,再就是可以处理各步骤的异常,catchMySql.Data.MySqlClient.MySqlException这个类型的异常。其他的用于填充数据的MySqlDataAdapter和 MySqlDataReader也是备好了的。
我想,在做正式的应用时,为防止SQL注入时关于参数化查询肯定会被提出来的,那就来看看这个MySQL官方驱动如何处理参数化查询的。它所用的方式和SqlServerProvider是一样的,用@author这样的形式来标识参数,并且同样支持AddWithValue(stringname,objectvalue)的方式。请看代码:
stringsql="updatewp_postssetpost_author=@authorandpost_status=@statuswhereid=@id"; //可以用?号的形式,如,但?号的形式不推荐使用 //stringsql="updatewp_postssetpost_author=?authorandpost_status=?statuswhereid=?id"; MySqlCommandcmd=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]
MySqlTransactiontrans=con.BeginTransaction();//启用事物
trans.Commit();//正常时提交
trans.Rollback();//异常时回滚
[code]
下一篇将介绍如何使用SourceForge上的开源MySQL.Net驱动怎么去操作MySQL数据库的。