首页 新闻 会员 周边

.net 程序中如何处理断电等的意外情况

0
悬赏园豆:60 [已解决问题] 解决于 2011-12-13 11:55

各位博友,请问大家在开发程序的时候,遇到了一些问题,项目组讨论未有好的解决方法。

有以下问题,希望能帮帮忙,提供解决思路。

1.程序远行中如果断电了,.Net会做如何处理,等下次启动电脑时,是否能恢复断电前的数据。

2.多个客户端同时修改一条数据,如何防止这样的情况,实现应用中就是有多个客户端操作一条数据的情况。

请各位大侠赐教

问题补充:

1.实然断电,机子重启等意外情况,想要保存用户界面上的数据,可以通过每隔几秒钟保存界面上的数据,各位大侠是否有更好的办法,或者每隔一段时间保存用户界面上的数据有何建议?

2.多个客户端同时修改一条数据,如果多个客户端同时调用一个方法A,那处理的机制是什么,等前一个客户端处理完了这个A方法后再进行下一次调用,还是同时执行方法A?

。。。谢谢

Set sail的主页 Set sail | 小虾三级 | 园豆:540
提问于:2011-12-07 11:44
< >
分享
最佳答案
2

关于断电,我们现在的做法是建立本地文件缓存,暂时针对每个关键业务点的每步操作都序列化后放进本地文件里,如果程序以外崩溃,下次登陆相关功能则加载本地序列化文件。没异常的话那在数据提交成功时就删除掉本地文件。这个方案比较简单也可靠,关键时没有成本。我们的系统使用点遍布在全国各地,每个点都陪ups不现实。

关于多人操作,其实问题不复杂借用数据库的update机制做状态锁定就可以了。

收获园豆:20
水一 | 菜鸟二级 |园豆:245 | 2011-12-08 23:49
其他回答(4)
1

1.推荐用UPS。内存的数据无法恢复。

2.事务隔离级别

收获园豆:10
碧落星痕 | 园豆:708 (小虾三级) | 2011-12-07 11:55

你好,事务隔离级别指的是在数据库中还是在代码中实现 

支持(0) 反对(0) Set sail | 园豆:540 (小虾三级) | 2011-12-07 14:36

@Set sail: 都可以,

ADO.net的Transaction,TransactionScope这两个是代码中关于事务的类。

数据库设置 SET TRANSACTION ISOLATION LEVEL<..>

 

支持(0) 反对(0) 碧落星痕 | 园豆:708 (小虾三级) | 2011-12-07 14:43

@Set sail: 内存数据库也无法解决突然断电的问题。

我有一个想法,使用WMI。

每个一段时间,比如UPS可以维持时间的1/3,检查电源信息,当使用UPS时,保存需要的数据,当程序启动时,读取这些数据。

 

 

支持(0) 反对(0) 碧落星痕 | 园豆:708 (小虾三级) | 2011-12-07 16:28

@碧落星痕: 现在就是在代码中用的 TransactionScope。

如下:表Process 中有字段TS ,TS为INT类型每次操作自加1,两个客户端同时操作下面这个API,我想判断一个客户端已经修改其值,另一个客户端就不能再修改了。

API是这样写的

 public bool TestAPI(Process ps)
{
//获取数据库中最新TS值
int GetTS=...
using (TransactionScope scope = new TransactionScope())
{
if(GetTS==ps.TS)
{
//logic
}
}
}

这样,本来TS为0,两个客户端同时调用时还是不能防止TS变为2,我想得到的结果是1.

支持(0) 反对(0) Set sail | 园豆:540 (小虾三级) | 2011-12-07 17:03
0

你可以考虑使用内存数据库来保存即时信息

收获园豆:10
VampireEarl | 园豆:21 (初学一级) | 2011-12-07 11:58
1

你可以尝试使用内存数据库来保存即时信息,在百度上去查查资料嘛!

收获园豆:10
VampireEarl | 园豆:21 (初学一级) | 2011-12-07 11:59

好的,谢谢,我先去了解下内存数据库

支持(0) 反对(0) Set sail | 园豆:540 (小虾三级) | 2011-12-07 12:42
0

第二个问题考虑添加TimeStamp字段控制数据;

收获园豆:10
winzheng | 园豆:8797 (大侠五级) | 2011-12-07 18:41

你好,数据库表中已有字段TimeStamp,但是如果两个客户端同时操作,当执行到比对TimeStamp时的值还是相等的,会有这种情况,该如何解决

支持(0) 反对(0) Set sail | 园豆:540 (小虾三级) | 2011-12-07 19:56

@Set sail: 如果一个用户改了TimeStamp 必然造成这个字段的变化,获取变化就意味这有人已经改动了

支持(0) 反对(0) winzheng | 园豆:8797 (大侠五级) | 2011-12-11 19:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册