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

  • 相关阅读:
    新站发布——寻爱交友网
    博客园居然还在运营
    关于Method类的invoke方法
    创建对象的四种方法
    事务操作
    数据库的并发
    run( )和start( )方法
    JAVA语言的下面几种数组复制方法中,哪个效率最高?
    构造函数问题
    上下转型的调用问题
  • 原文地址:https://www.cnblogs.com/kevin/p/3454.html
Copyright © 2011-2022 走看看