You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quartz.NET v3.5.0连接SqlServer数据源初始化失败求助

问题:Quartz v3.5.0 切换SqlServer JobStore后数据源初始化失败

运行环境:.NET Framework 4.8 + Autofac IoC + Quartz v3.5.0(Windows服务)
原本使用RAMJobStore时功能正常,在本地SqlServer中创建QuartzData数据库并配置切换到AdoJobStore后,调用GetScheduler()时持续抛出异常:

Quartz.SchedulerException: 'Could not Initialize DataSource: default'
根异常:ArgumentOutOfRangeException: There is no metadata information for provider 'SqlServer-20' Parameter name: providerName

相关配置与代码

App.config 配置

<quartz>
    <add key="quartz.scheduler.instanceName" value="DefaultQuartzScheduler" />
    <add key="quartz.scheduler.instanceId" value="instance_one" />
    <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
    <add key="quartz.threadPool.threadCount" value="5" />
    
    <add key="quartz.jobStore.misfireThreshold" value="60000" />
    <add key="quartz.serializer.type" value="json" />
    <add key="quartz.jobStore.clustered" value="false" />
    <!--<add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz"/>
    -->
    
    <add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
    <add key="quartz.jobStore.useProperties" value="true" />
      <add key="quartz.jobStore.tablePrefix" value="QRTZ_" />
    
    <add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" />
    <add key="quartz.jobStore.dataSource" value="default" />
    <add key="quartz.dataSource.default.connectionString" value="Server=localhost;Database=QuartzData;Uid=XXX;Pwd=XXX" />
    <add key="quartz.dataSource.default.provider" value="SqlServer-20" />
</quartz>

Program.cs 核心代码

var config = (NameValueCollection)ConfigurationManager.GetSection("quartz");

ISchedulerFactory schedulerFactory = new StdSchedulerFactory(config);
IScheduler Scheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult();

解决方案

异常根源是数据源提供者名称配置错误,Quartz v3.5.0中没有SqlServer-20这个合法的提供者名称,需根据使用的ADO.NET驱动修改:

  • 若使用.NET Framework默认的System.Data.SqlClient驱动,将提供者名称改为SqlServer
  • 若使用新版Microsoft.Data.SqlClient驱动,将提供者名称改为SqlServer-Microsoft

修改后的配置项示例:

<add key="quartz.dataSource.default.provider" value="SqlServer" />

额外检查项:

  • 确认已执行Quartz官方提供的对应SqlServer版本的建表脚本,确保QuartzData数据库中存在完整的QRTZ_开头的表结构
  • 验证连接字符串中的账号拥有QuartzData数据库的读写权限
  • 若使用Microsoft.Data.SqlClient,需确保项目已安装对应版本的Microsoft.Data.SqlClient NuGet包

内容的提问来源于stack exchange,提问作者RoxSeibert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 02:01:17