写windows服务日志-.net4.5.2-定时修改数据库中某些参数

环境:

windows 11

Visual Studio 2015

.net 4.5.2

SQL Server

目的:

定时修改数据库中某些参数的值

c 复制代码
定时修改24小时内,SQL数据库中,表JD_Reports 内,如果部门是'体检科',设置打印类型为 1
可以打印。

步骤:

1、新建项目,创建windows 服务

2、下载日志程序包 NLog

3、在App.config中配置日志包NLog

csharp 复制代码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
  </configSections>

  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <targets>
      <target name="file" xsi:type="File" fileName="${basedir}/Logs/${date:format=yyyy-MM-dd}/${date:format=yyyy-MM-dd}.txt" layout="[${date:format=yyyy-MM-dd HH\:mm\:ss}][${level}] ${message} ${exception}"/>
    </targets>
    <rules>
      <logger name="*" minlevel="Debug" writeTo="file"/>
    </rules>
  </nlog>

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
</configuration>

4、Report_Print.cs

csharp 复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Timers;
using NLog;  // 引入 NLog 命名空间,用于日志记录

namespace Report_print
{
    public partial class Report_Print : ServiceBase
    {

        private Timer _timer;
        private readonly string _connectionString = "Data Source=.;Initial Catalog=【自己数据库】;User Id=sa;Password=【自己的密码】;";
        // 创建一个静态日志记录器实例,用于在服务中记录日志
        private static readonly Logger Log = LogManager.GetCurrentClassLogger();

        public Report_Print()
        {
            InitializeComponent();
            // 设置服务每5分钟检查一次
            _timer = new Timer(5 * 60 * 1000); // 5分钟
            _timer.Elapsed += TimerElapsed;
        }

        protected override void OnStart(string[] args)
        {
            // 服务启动时记录日志
            Log.Debug("开始执行");
            _timer.Start();
            // 启动时立即执行一次
            UpdatePrintType();
        }

        protected override void OnStop()
        {
            _timer.Stop();
            // 服务启动时记录日志
            Log.Debug("服务停止执行");
        }

        private void TimerElapsed(object sender, ElapsedEventArgs e)
        {
            UpdatePrintType();
        }

        private void UpdatePrintType()
        {
            try
            {
                using (SqlConnection conn = new SqlConnection(_connectionString))
                {
                    conn.Open();
                    string sql = @"
                        UPDATE JD_Reports 
                        SET PrintType = 1 
                        WHERE Depart = '体检科' 
                        AND CheckTime >= DATEADD(HOUR, -24, GETDATE())
                        AND (PrintType IS NULL OR PrintType != 1)";

                    using (SqlCommand cmd = new SqlCommand(sql, conn))
                    {
                        int rowsAffected = cmd.ExecuteNonQuery();
                        Log.Debug("写入日志成功: " + rowsAffected.ToString());
                        // 这里可以添加日志记录受影响的行数
                    }
                }
            }
            catch (Exception ex)
            {
                // 这里应该添加适当的错误日志记录
                // 例如使用 EventLog 或其他日志框架
            }
        }
    }
}

5、在 Report_Print.cs 界面内,右键"添加安装程序"

6、配置ServiceInstaller1

7、配置serviceProcessInstaller1

8、右键,编译程序

完成

9、安装程序

csharp 复制代码
sc create Report_Print binPath= "E:\vs2015\study\Report_print\Report_print\bin\Debug\Report_print.exe"
sc start Report_Print 

9.1卸载程序

csharp 复制代码
sc stop Report_Print
sc delete Report_Print

10、安装成功

相关推荐
我是唐青枫3 分钟前
别只会用 MemoryCache!C#.NET CacheManager 详解:多级缓存、Region 与 Redis 实战
缓存·c#·.net
重生之小比特5 分钟前
【MySQL 数据库】表的操作
数据库·mysql
shughui10 分钟前
2026年最新版Python安装和PyCharm安装教程(图文详细 附安装包)
开发语言·windows·python·pycharm·编辑器
CSharp精选营15 分钟前
2026个人博客建站指南:这4种方案总有一款适合你
.net·wordpress·个人博客·独立站·githubpages·建站教程
雷工笔记1 小时前
MES 系统 设备保养管理模块详细设计方案
运维·数据库
晚风_END3 小时前
Linux|操作系统|zfs文件系统的使用详解
linux·运维·服务器·数据库·postgresql·性能优化·宽度优先
天若有情6738 小时前
程序员原创|借鉴JS事件冒泡,根治电脑文件混乱的“冒泡整理法”
开发语言·javascript·windows·ecmascript·电脑·办公·日常
九成宫9 小时前
Outlook使用
windows·笔记·outlook·办公
晚风_END9 小时前
Linux|操作系统|最新版openzfs编译记录
linux·运维·服务器·数据库·spring·中间件·个人开发
dLYG DUMS10 小时前
DBeaver连接本地MySQL、创建数据库表的基础操作
数据库·mysql