C#使用开源驱动连接操作MySQL数据库

 更新时间:2020年6月25日 11:32  点击:1796

前面一篇 https://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","https://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", "https://www.jb51.net" } },
                "Settings",
                new object[,] { { "SettingID", "=", 100 } },
                null
            ); //new 后即执行,可用 bSuccess 与 Query 属性分别获得成功与否及相应的 SQL
 
            //参数与 MySQLUpdateCommand 的后四个相同
            new MySQLDeleteCommand(dbCon, "Trash", null, null);

[!--infotagslink--]

相关文章

  • C#实现简单的登录界面

    我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
  • 浅谈C# 字段和属性

    这篇文章主要介绍了C# 字段和属性的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-11-03
  • php svn操作类

    以前我们开发大型项目时都会用到svn来同步,因为开发产品的人过多,所以我们会利用软件来管理,今天发有一居然可以利用php来管理svn哦,好了看看吧。 代码如下 ...2016-11-25
  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • C#实现简单的Http请求实例

    这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • C#中new的几种用法详解

    本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
  • 使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)

    这篇文章主要介绍了使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • C#和JavaScript实现交互的方法

    最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • 轻松学习C#的基础入门

    轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
  • C#变量命名规则小结

    本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
  • C#绘制曲线图的方法

    这篇文章主要介绍了C#绘制曲线图的方法,以完整实例形式较为详细的分析了C#进行曲线绘制的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • c#自带缓存使用方法 c#移除清理缓存

    这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25
  • c#中(&&,||)与(&,|)的区别详解

    这篇文章主要介绍了c#中(&&,||)与(&,|)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • 经典实例讲解C#递归算法

    这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25