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秒都没有问题。

  • 相关阅读:
    记一次RAID阵列的迁移经历
    PAT A1131 Subway Map
    PAT A1103 Integer Factorization
    ZOJ1002 Fire Net
    L3022 地铁一日游
    github的使用小技巧
    hexo博客部署在阿里云上
    Windows环境搭建hexo博客部署到GitHub上
    Centos7.X下安装node.js npm和 淘宝镜像(cnpm)
    今天新注册的,第一篇文章
  • 原文地址:https://www.cnblogs.com/kevin/p/3454.html
Copyright © 2011-2022 走看看