windows服务与事务

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

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

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

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

原文地址:https://www.cnblogs.com/kevin/p/3454.html