Windows服务不能检索编辑过的SQL行

本文关键字:SQL 编辑 服务 不能 检索 Windows | 更新日期: 2023-09-27 18:13:57

我试着用搜索找到这个问题的答案,但我觉得我的措辞很差,结果很好。

我有一个使用Linq-SQL的windows服务。它应该每隔20秒从表中提取数据,处理数据,相应地更新行,然后冲洗并重复。

    SQLDataContext sqlDB;
    protected override void OnStart(string[] args)
    {
         ServiceLog1.WriteEntry("Service1 started");
        sqlDB= new SQLDataContext ();
        //Initalize and start Timer for service action
        Timer timer = new Timer();
        timer.Interval = 20000; // 20 seconds
        timer.Elapsed += new ElapsedEventHandler(this.DoWork);
        timer.Start();
    }
    public void DoWork(object sender, ElapsedEventArgs args)
    {
        List<Items> items= sqlDB.Items.Where(i=> i.Processed == false).Take(20).ToList();
        if(items.Count > 0)
            ServiceLog1.WriteEntry("Processing " + items.Count + " queue items.");
         //work work...
         //set items processed == true
         //submit changes to DB

我的问题(我甚至不能100%确定这是一个问题)是这样的:

如果这是运行三个未处理的测试项,它将把它们全部更新为应该处理的。测试WHAT IF场景很简单,如果我要在SQL中将一个项目的processed值更改回false,服务将在事件日志中创建一个条目,表示它正在处理一个项目,但该项目将永远不会再次更新,并且将在每个循环中处理。

这似乎只发生在SQL中编辑的项上。新项目处理正常。有人能给我解释一下这是怎么回事吗?

Windows服务不能检索编辑过的SQL行

正如Damien_The_Unbeliever在问题评论中指出的那样,我的问题与在内存中保留对象的SQLDataContext有关。我需要在每次计时器结束时创建一个新的上下文。

相关文章: