【问题标题】:How to implement scheduler with Windows Form Application in VB.Net如何在 VB.Net 中使用 Windows 窗体应用程序实现调度程序
【发布时间】:2017-04-27 12:18:08
【问题描述】:

我正在开发用 VB.NET 开发的 Windows 应用程序。此应用程序包含多个分析测试。当用户单击特定测试时,将执行加密的 SQL 查询并将相应的输出粘贴到 Excel 中。

现在要求自动安排此任务,用户将指定日期和时间,并在该特定时间执行测试。此外,出于安全目的,SQL 查询以加密格式存储,因此我不能使用 SSIS 包或 SQL 作业代理来安排任务。

在此特定场景中可以使用哪些可能的方法/解决方法来实现 .NET Windows 应用程序的调度程序?

【问题讨论】:

  • 您能否创建一个简单的控制台应用程序来处理您的问题,然后通过 Window 自己的调度程序运行它?
  • 我同意 Gimly 的观点,在批处理或日常任务中,需要尽可能地执行这些测试或报告,以便将这些测试或报告作为与控制台应用程序不同的可执行文件。然后只需在 Windows 任务调度程序上创建一个任务
  • 我们正在使用Quartz Scheduler,Windows 计划任务无法执行。
  • 几个月前我有同样的任务,按计划执行查询并将结果放入 Excel 文档中。我通过在 C# 中创建自己的服务来解决它。我们将查询和所需的时间表存储在数据库中,我的服务获取这些数据并在正确的时间执行语句。
  • @Kevin 你为调度器使用了什么方法?

标签: c# sql .net sql-server vb.net


【解决方案1】:

好的,我将尝试解释我们使用的方法。我们有一个 web ui、一个数据库和 2 个 windows 服务, 一种用于更新日程信息,一种负责导出到 Excel。

数据库

一个表,用于存储我们的查询以及他的日程安排信息。 存储所有导出的表,因此我们可以保留历史记录。

网页界面

通过网络界面,我们可以存储需要按计划自动执行的查询, 一些每小时,一些每天,一些每周和一些每月。 在界面上,用户可以对日程安排进行分散配置。

查询保存后,我们立即通过一个自写的方法计算本次查询的nextruntime SQL 函数并将此值存储在数据库中。每次记录发生更新时,前查询更改或 计划信息更改,我们更新字段 lastmodified。

服务

我们的第一个服务读取字段 nextruntime 不为空的所有信息。我们将这些信息保存在内存中的对象列表中。 我们每 5 分钟检查一次导出是否有更改,因为可以更改查询或计划信息 已更新。如果我们找到更新的记录,我们会在对象列表中更新此信息。 在同一个服务中,我们每 30 秒循环一次对象列表,看看 nextruntime 是否等于实际的系统日期时间。如果是这样的话 我们向第二个表添加一条具有特定状态的记录,因此第二个服务知道需要处理哪些记录,并且我们还保持增量 序列号,以便按顺序导出它们。

我们的第二个服务轮询第二个表并负责执行查询,将结果导出到 Excel,并在完成后更新 第一个表中的 nextruntime 字段基于调度信息。为了创建 Excel 文件,我们使用了 OpenXml 库。

我希望这对你来说有点清楚。

【讨论】:

    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    相关资源
    最近更新 更多