没有提供者 'SqlServer-20' 的元数据信息
There is no metadata information for provider 'SqlServer-20'
我想测试 Quartz.NET 3.0 for .NET Core 的 SQL 数据库功能。不幸的是,我无法正确配置 StdSchedulerFactory
,调用 StdSchedulerFactory.GetScheduler
时总是出现以下异常:
System.ArgumentOutOfRangeException:
There is no metadata information for provider 'SqlServer-20'
Parameter name: providerName
at Quartz.Impl.AdoJobStore.Common.DbProvider.GetDbMetadata(String providerName)
at Quartz.Impl.AdoJobStore.Common.DbProvider..ctor(String dbProviderName, String connectionString)
at Quartz.Impl.StdSchedulerFactory.<Instantiate>d__66.MoveNext()
我已使用以下值配置工厂:
var configuration = new NameValueCollection
{
{ "quartz.jobStore.type", "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" },
{ "quartz.jobStore.driverDelegateType", "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" },
{ "quartz.jobStore.tablePrefix", "QRTZ_" },
{ "quartz.jobStore.dataSource", "default" },
{ "quartz.dataSource.default.connectionString", "Server=(localdb)\mssqllocaldb;Database=QuartzTest;Trusted_Connection=True;MultipleActiveResultSets=true" },
{ "quartz.dataSource.default.provider", "SqlServer-20" },
{ "quartz.jobStore.useProperties", "true" },
{ "quartz.serializer.type", "json" }
};
var schedulerFactory = new StdSchedulerFactory(configuration);
如您所见,我目前的目标是 LocalDB (v12.0.2000)。我还在 SQL Server Express 上检查过它 - 结果相同。
如何避免这个异常?
- 我是否遗漏了任何我应该配置的属性?
- 我是否必须为数据库提供一些数据?我只执行了
tables_sqlServer.sql
脚本。
- SqlServer-20 数据库驱动程序应该作为 .NET 3.5 的一部分安装,还是需要单独安装?
- Quartz.NET 目前不支持 .NET Core 的此功能吗?我使用的是 3.0.0-alpha2 版本。
- 我应该定位其他 NuGet 包吗?我引用了 Quartz 和 Quartz.Serialization.Json
我的一个朋友刚刚找到了答案:根据 this example on Github,在 .NET Core 项目中必须使用 SqlServer-41
而不是 SqlServer-20
。
目前根据 beta1 的变更日志,没有提供程序的版本。因此,SqlServer 的正确提供程序配置是:
["quartz.dataSource.sqlserver.provider"] = "SqlServer"
// Grab the Scheduler instance from the Factory
NameValueCollection properties = new NameValueCollection
{
{ "quartz.serializer.type", "binary" }
};
properties["quartz.jobStore.lockHandler.type"] = "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz";
properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz";
properties["quartz.jobStore.dataSource"] = "default";
properties["quartz.dataSource.default.connectionString"] = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=quartznet;Data Source=.\sqlInstance;";
properties["quartz.dataSource.default.provider"] = "SqlServer";
properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";
properties["quartz.jobStore.useProperties"] = "true";
properties["quartz.jobStore.tablePrefix"] = "QRTZ_";
StdSchedulerFactory factory = new StdSchedulerFactory(properties);
IScheduler scheduler = await factory.GetScheduler();
我想测试 Quartz.NET 3.0 for .NET Core 的 SQL 数据库功能。不幸的是,我无法正确配置 StdSchedulerFactory
,调用 StdSchedulerFactory.GetScheduler
时总是出现以下异常:
System.ArgumentOutOfRangeException:
There is no metadata information for provider 'SqlServer-20'
Parameter name: providerName
at Quartz.Impl.AdoJobStore.Common.DbProvider.GetDbMetadata(String providerName)
at Quartz.Impl.AdoJobStore.Common.DbProvider..ctor(String dbProviderName, String connectionString)
at Quartz.Impl.StdSchedulerFactory.<Instantiate>d__66.MoveNext()
我已使用以下值配置工厂:
var configuration = new NameValueCollection
{
{ "quartz.jobStore.type", "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" },
{ "quartz.jobStore.driverDelegateType", "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" },
{ "quartz.jobStore.tablePrefix", "QRTZ_" },
{ "quartz.jobStore.dataSource", "default" },
{ "quartz.dataSource.default.connectionString", "Server=(localdb)\mssqllocaldb;Database=QuartzTest;Trusted_Connection=True;MultipleActiveResultSets=true" },
{ "quartz.dataSource.default.provider", "SqlServer-20" },
{ "quartz.jobStore.useProperties", "true" },
{ "quartz.serializer.type", "json" }
};
var schedulerFactory = new StdSchedulerFactory(configuration);
如您所见,我目前的目标是 LocalDB (v12.0.2000)。我还在 SQL Server Express 上检查过它 - 结果相同。
如何避免这个异常?
- 我是否遗漏了任何我应该配置的属性?
- 我是否必须为数据库提供一些数据?我只执行了
tables_sqlServer.sql
脚本。 - SqlServer-20 数据库驱动程序应该作为 .NET 3.5 的一部分安装,还是需要单独安装?
- Quartz.NET 目前不支持 .NET Core 的此功能吗?我使用的是 3.0.0-alpha2 版本。
- 我应该定位其他 NuGet 包吗?我引用了 Quartz 和 Quartz.Serialization.Json
我的一个朋友刚刚找到了答案:根据 this example on Github,在 .NET Core 项目中必须使用 SqlServer-41
而不是 SqlServer-20
。
目前根据 beta1 的变更日志,没有提供程序的版本。因此,SqlServer 的正确提供程序配置是:
["quartz.dataSource.sqlserver.provider"] = "SqlServer"
// Grab the Scheduler instance from the Factory
NameValueCollection properties = new NameValueCollection
{
{ "quartz.serializer.type", "binary" }
};
properties["quartz.jobStore.lockHandler.type"] = "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz";
properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz";
properties["quartz.jobStore.dataSource"] = "default";
properties["quartz.dataSource.default.connectionString"] = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=quartznet;Data Source=.\sqlInstance;";
properties["quartz.dataSource.default.provider"] = "SqlServer";
properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";
properties["quartz.jobStore.useProperties"] = "true";
properties["quartz.jobStore.tablePrefix"] = "QRTZ_";
StdSchedulerFactory factory = new StdSchedulerFactory(properties);
IScheduler scheduler = await factory.GetScheduler();