zoukankan      html  css  js  c++  java
  • windows服务与事务

    上周末改了一个以前的程序,把一个单线程运行的windows服务,改成每次timer触发一个新的线程,线程内包括一个数据库读、更新标志位的事务。本以为这样可以解决timer间隔时间不敢过小的缺点,但引来了更加棘手的问题。
    分析后认为:前一个事务开始后,后一个事务仍然能够读取数据库。——所以造成了重复处理数据;
                事务我是用SqlConnection.BeginTransaction()来创建的,但这里会“不时”地出现问题,抛出未知异常。
    每调试一下服务,都要附加进程,郁闷。

    找了一下资料,准备这样解决:
    ACID属性——要保证事务的:不可分性、一致性、隔离性和持续性。
    隔离性在BeginTransaction()方法里有一个属性IsolationLevel可以设置,试试看;
    并且BeginTransaction()会抛出InvalidOperationException异常,但表明的是:不支持并行事务。
    我所希望找到的:“检测数据库、表的状态(如Lock……)”的方法一直没有找到,不知道这个异常能否解决。
    并且发现连接字符串为:connect reset=true;

    添加“隔离级别”的属性为:串行;
    捕捉InvalidOperationException异常;
    去掉connect reset;

    程序比较正常。触发时间设置成1秒都没有问题。

  • 相关阅读:
    Verilog --序列检测器(采用移位寄存器实现)
    SV -- Randomization 随机化
    SV -- Interprocess Communication (IPC 线程间通信)
    SV -- Class 类
    Verilog -- 序列模三(整除3)检测器
    VSCode+C++环境搭建
    在次线性时间内计算线性递归数列
    Codefest19受虐记
    ABC135记录
    Paint.NET软件分享
  • 原文地址:https://www.cnblogs.com/kevin/p/3454.html
Copyright © 2011-2022 走看看