mysql 驱动包_【B】替换 Quartz.net 默认使用的 MySql.Data 为 Mysqlconnector 的学习过程...

文章转载授权级别:B

无论是 Quartz.net 还是 MySql.Data 都是我们比较熟悉的库了,Quartz.net 如果配置为使用 MySql 数据库做持久化时,默认是硬编码了使用 MySql.Data 来操作 MySql 数据库的。下面是我的一些个人诉求和实践,和大家共同探讨一下。

0x01 为什么要替换 MySql.Data

  • MySql.Data 虽然是官方驱动,但实际上实现质量并不是很高。我和一些朋友都经历过在使用它做长时间的连接查询时异常崩溃,在 老农 菊巨 的推荐以后,我一直使用 MySqlConnector 这个 MySql 驱动。

  • 因为我的项目都是使用了 MySqlConnector 这个驱动,此驱动为了兼容官方的写法,类名和命名空间基本保持一致,这就导致如果你同时引用这两个库后,再想创建 MySqlConnection 对象时,编译器无法识别到底是哪一个程序集的类型。

因此如果你项目中已经使用了 MySqlConnector,那么最好还是替换掉 Quarzt.net 默认使用的驱动。

0x02 测试 Quartz.net 使用 MySql.Data

  1. 在本地 MySql 数据库中创建测试数据库 quartz, 并通过执行脚本 https://raw.githubusercontent.com/dotnetcore/DotnetSpider/master/src/DotnetSpider.Portal/DDL/MySql.sql 来创建所需要的表

  2. 首先创建一个空的 Console 项目并添加 Quartz 这个包

  3. 修改 Program.cs 代码如下

class Program {     public class HelloJob : IJob     {       public Task Execute(IJobExecutionContext context)       {         Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} Greetings from HelloJob!");         return Task.CompletedTask;       }     }        static async Task Main(string[] args)    {
           IScheduler scheduler = null;       try       {
               var properties = new NameValueCollection           {
                   {
    "quartz.jobStore.type", "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz"},               {
    "quartz.jobStore.dataSource", "myDs"},               {
    "quartz.serializer.type", "binary"},               {
    "quartz.dataSource.myDs.provider", "MySql"},               {
                       "quartz.dataSource.myDs.connectionString",                   "Database='quartz';Data Source=localhost;password=1qazZAQ!;User ID=root;Port=3306;"               }           };             scheduler = await new StdSchedulerFactory(properties).GetScheduler();           await scheduler.Start();             if (!await scheduler.CheckExists(new JobKey("job1", "group1")))           {
                   var trigger = TriggerBuilder.Create().WithCronSchedule("*/5 * * * * ?").WithIdentity("trigger1")                   .Build();                 var job = JobBuilder.Create().WithIdentity("job1", "group1")                   .RequestRecovery(true).Build();                   await scheduler.ScheduleJob(job, trigger);           }             Console.Read();       }       finally       {
               if (scheduler != null)           {
                   await scheduler.Shutdown();           }       }   } }

直接运行可以发现程序异常退出了,异常信息如下:

Unhandled Exception: Quartz.SchedulerException: Could not Initialize DataSource: myDs ---> System.ArgumentException: Error while reading metadata information for provider 'MySql'
Parameter name: providerName ---> Quartz.SchedulerConfigExcept
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL Connector/Net 版本所需的 .Net Framework 版本 不同的版本 MySQL Connector/Net 所需的 .Net Framework 版本也是不同的: MySQL Connector/Net 6.9.12 需要 .Net Framework 4.0 或更高版本支持。(2018-04-30, General Availability) MySQL Connector/Ne 6.10.1 需要 .Net Framework 4.5.1 或更高版本支持。 MySQL Connector Net 6.10.2 到最新的 MySQL Connector Net 8.0.20 需要 .Net Framework 4.5.2 或更高版本。 MySQL Connector/NET 6.9.12 支持与 MySQL Server 8.0.3 以及之前版本的MySQL Server连接。 从官方网站下载mysql-connector-net-8.20.0.msi安装之后,安装目录下的Assemblies中只有v4.5.2的MySql.Data.dll,也就是说它需要 v4.5.2 以上版本的 .Net Framework 支持。如果VS项目的目标框架是.NET Framework 4.5.2或更高版本,则引用正常;将项目的目标框架改为.NET Framework 4 再进行编译就会报错,提示“ 未能解析主引用“MySql.Data, Version=...... 该程序集是针对 .NETFramework,Version=v4.5.2 框架生成的......该框架版本高于当前目标框架 .NETFramework,Version=v4.0”。这表明这个 MySQL Connector/Net 的 MySql.Data.dll 需要 .Net Framework v4.5.2 的支持。 如果项目的目标框架是 .Net Framework v4.0 则最高只能使用 MySQL Connector/Net 6.9.12 的 MySql.Data.dll 。而需要注意的是 MySQL Connector/Net 6.9.12 的 MySql.Data.dll 是在2018-04-30发布的,官方文档显示支持与 MySQL Server 8.0.3 及之前的版本的MySQL Server连接。 C#通过MySql.Data.dll连接MySql数据库 在项目中引用组件:MySql.Data.dll (记得复制到本地中选择为true / 或直接把MySql.Data.dll复制到debug文件夹下) 在代码中 using MySql.Data.MySqlClient; ......接下来这里就看你表演了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值