C# winfrom程序编写定时任务更新数据库中信息

问题遇到的现象和发生背景

现象1:通过一个定时任务找到文件夹的pdf文件名更新数据库中表的字段信息。
现象2:定时任务找到这个文件下的生成时间,并根据生成文件的时间差进行更新数据库中表的信息。

用代码块功能插入代码,请勿粘贴截图

这是我写的
iCertPrint.UpEditPDFileName(Convert.ToDateTime(System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")))

 public int UpEditPDFileName(DateTime dateTime)
        {
            using (DataContext FdataContext = new DataContext())
            {
                string querySql = @"select id,PrintFileName,PrintTime from t where operateType='1' and PrintTime!='';";
                IQuery query = FdataContext.CreateQuery(querySql);
                DataTable Fdt = query.ToTable();
                for (int i = 0; i < Fdt.Rows.Count; i++)
                {
                DateTime PrintTime = Convert.ToDateTime(Fdt.Rows[i]["PrintTime"].ToString());
                TimeSpan d3 = PrintTime.Subtract(dateTime);
                if (Convert.ToInt32(d3.Minutes.ToString()) < 2)
                {
                    //MessageBox.Show(CurrentUser.Brand + "合格证打印更新日志信息!");
                var files = GetAllFiles(@"D:\BackPDF\other");
                foreach (var fileInfo in files)
                {
                        var FileName = fileInfo.FullName.IndexOf(@"D:\BackPDF\other");
                        var str = fileInfo.Name;
                        using (DataContext dataContext = new DataContext())
                        {
                            IDbTransaction tr = dataContext.BeginTransaction();
                            StringBuilder sb = new StringBuilder();
                            sb.AppendFormat(" UPDATE t SET PrintFileName='{0}' WHERE id='{1}';", str.ToString(), Fdt.Rows[i]["id"].ToString());
                            IDbExecutor executor = dataContext.CreateExecutor(sb.ToString());
                            int k = executor.ExecuteNonQuery(null);
                            if (k> 0)
                            {
                                tr.Commit();
                            }
                            else
                            {
                                tr.Rollback();
                            }

                        }                    
                    }
                }                              
                }
            }
             return 1;
        }

 /// <summary>
        /// 获取文件夹下所有的文件
        /// </summary>
        /// <author>2022-11-11</author>
        /// <param name="path"></param>
        /// <returns></returns>
        public static FileInfo[] GetAllFiles(string path)
        {
            try
            {
                var files = new List<FileInfo>();
                files.AddRange(new DirectoryInfo(path).GetFiles());//获取文件夹下所有文件
                var tmpdics = new DirectoryInfo(path).GetDirectories();//获取文件夹下所有子文件夹
                foreach (var dic in tmpdics)
                {
                    files.AddRange(GetAllFiles(dic.FullName));//递归获取文件
                }
                return files.ToArray();
            }
            catch (Exception)
            {
                return null;
            }
        }

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/586653752966187.png "#left")
运行结果及报错内容

达不到想要的结果 在进行更新的时候很慢 导致打印文件的时候时间太长了。

我的解答思路和尝试过的方法

编写一个定时任务进行更新 根据当前打印时间跟数据库中的打印时间作对比小于2分钟的文件 就获取文件夹下所有的文件 找到这个一分钟内打印的文件 并把这个文件的文件名更新到数据库。
打印pdf的时候生成文件后找到这个文件名并更新到数据库中。
一个订单打印多次 也就是多个文件 我要把这个多个文件的pdf的文件名 更新到数据库中,以逗号隔开的形式进行保存到数据库中。

我想要达到的结果

编写一个定时任务进行更新 实现一分钟更新一次或者找到这个文件下所有的文件 根据文件的生成时间进行更新。(一个订单有多个pdf 我要把这多个pdf的文件更新到这个数据库中日志表中,存储的格式为:字段等于=1pdf,2pdf,3pdf)


我要实现的效果:
编写一个定时任务找到这个文件夹下所有的文件,取到这些文件一分钟内打印成功的文件名称,并更新到数据库中的,存储格式为:1pdf,2pdf,pdfn,...
以逗号隔开的形式进行存储。

问题过于笼统,很难猜测你有啥问题。不过大概意思我可以弄明白

所以我不根据你具体实现写,只说按照你要实现的目标,我们可以避免进入你觉得不好弄的的地方

比如我可以准备3个文件夹: 原始存放,待入库,已入库
当你扫描到文件后,把文件移动到待入库目录(可以生成一个批次目录),已入库后把文件重待入库目录移动到已入库目录

这样处理就没你上面那些问题了,反正定时器获取的永远都是没处理过的