【问题标题】:Run a C# Application periodically to update database定期运行 C# 应用程序以更新数据库
【发布时间】:2026-02-12 08:30:02
【问题描述】:

我想知道是否可以定期运行 C# 控制台或 ASP.NET 应用程序。

我的目的是自动每月执行一次以下步骤:

1) 查询 来源 数据库。

2) 获取在 (1) 处的查询结果并使用 LINQC# 操纵它们>,例如通过检查目标数据库中是否已经存在某个值。

3) 将派生数据存储在目标数据库中。

应用程序必须在 Windows Server 2008 上运行,Source 数据库位于 SQL 2005 Server 中,Destination 数据库位于 SQL 2008 Server 中。

我尝试创建例如一个 SSIS 包,但它无法完成这项工作,因为我无法添加任何逻辑。

有人有什么建议吗?

【问题讨论】:

  • 这可以在 SSIS 中完成。你有脚本任务来编写你的脚本。
  • 为什么需要使用C#?你能把这个逻辑封装在一个或多个存储过程中,然后用 SQL 代理安排它们吗?
  • 另外,您还可以创建命令行 dotnet 应用程序并通过计划任务或 SQL Server 代理对其进行计划。
  • 您可以向 SSIS 添加逻辑。这就是 SSIS 的目的。

标签: c# sql database triggers


【解决方案1】:

您应该创建一个计划任务来执行此操作。看这里:控制面板->管理工具->任务计划程序

正如您所说,是的 - 强烈建议使用控制台应用程序。


编辑

我同意@andynormancx 的观点,因为 SSIS 可能是更好的方法;但是,创建由计划任务执行的控制台应用程序是普遍接受的。这归结为您的资源、时间和专业知识:学习足够的 SSIS 知识以在 SqlServer 中创建一个包来完成您需要的工作可能值得,也可能不值得。如果有人要使用 SSIS 来执行此任务给出完整的答案,我当然会屈服于这种专业知识。

【讨论】:

  • +1 - 我想补充一点,你应该把它变成一个控制台应用程序。
  • 如果逻辑很简单,您还可以创建一个存储过程并将其作为 sql 中的作业执行。但任务调度程序将是最好的
  • @IAbstract:感谢您的回答。逻辑很简单:我通过查询(quantitycustomer)从源数据库中获取两列,然后从目标数据库中检查客户是否存在以及是否存在在这种情况下,我将一行添加到具有 customerIDquantity当前月份 的现有表中。你的解决方案可行吗?
  • @francesco 它听起来 像一个相当直接的 insert..into..select 查询,它实际上涉及任何逻辑(除了可能生成某种月份编号列值)
  • 恐怕我对SSIS的细节不太了解,其他人将不得不详细回答。但是,是的,如果这项工作真的归结为运行查询,那么有比编写自己的控制台应用程序更好的方法。
【解决方案2】:

您可以创建一个新的计划任务。这会容易得多,而且您不必重新发明*。

【讨论】:

    【解决方案3】:

    您可以创建一个计划任务,以预先定义的时间间隔调用您的 .exe。

    转到您的控制面板并选择计划任务,然后添加计划任务

    【讨论】:

      【解决方案4】:

      当然可以。但我建议将其设为 Windows 服务。

      【讨论】:

      • 为什么要推荐 Windows 服务?
      • @IAbstract - 我建议它也是一个 Windows 服务,因为它将在后台运行,因此用户不必担心每个月运行代码。将其设置为按时间运行,不要担心。为什么不把它写成服务呢?
      • 使用计划任务比每月运行一次任务而使用专门的服务要好得多。虽然现在编写 Windows 服务要容易得多,但通过调度程序运行任务仍然少了很多麻烦。
      • @Jethro:“所以用户不必担心每个月运行代码”......这就是计划任务的用途。
      【解决方案5】:

      如果你真的想用 C# 来做,我建议你写一个服务,你的代码几乎和普通的控制台应用程序一样。

      查看以下链接以开始使用。 C# Service step by step

      【讨论】:

      • Windows 服务对于这样的事情来说太过分了。
      最近更新 更多