各位博友,请问大家在开发程序的时候,遇到了一些问题,项目组讨论未有好的解决方法。
有以下问题,希望能帮帮忙,提供解决思路。
1.程序远行中如果断电了,.Net会做如何处理,等下次启动电脑时,是否能恢复断电前的数据。
2.多个客户端同时修改一条数据,如何防止这样的情况,实现应用中就是有多个客户端操作一条数据的情况。
请各位大侠赐教
1.实然断电,机子重启等意外情况,想要保存用户界面上的数据,可以通过每隔几秒钟保存界面上的数据,各位大侠是否有更好的办法,或者每隔一段时间保存用户界面上的数据有何建议?
2.多个客户端同时修改一条数据,如果多个客户端同时调用一个方法A,那处理的机制是什么,等前一个客户端处理完了这个A方法后再进行下一次调用,还是同时执行方法A?
。。。谢谢
关于断电,我们现在的做法是建立本地文件缓存,暂时针对每个关键业务点的每步操作都序列化后放进本地文件里,如果程序以外崩溃,下次登陆相关功能则加载本地序列化文件。没异常的话那在数据提交成功时就删除掉本地文件。这个方案比较简单也可靠,关键时没有成本。我们的系统使用点遍布在全国各地,每个点都陪ups不现实。
关于多人操作,其实问题不复杂借用数据库的update机制做状态锁定就可以了。
1.推荐用UPS。内存的数据无法恢复。
2.事务隔离级别
你好,事务隔离级别指的是在数据库中还是在代码中实现
@Set sail: 都可以,
ADO.net的Transaction,TransactionScope这两个是代码中关于事务的类。
数据库设置 SET TRANSACTION ISOLATION LEVEL<..>
@Set sail: 内存数据库也无法解决突然断电的问题。
我有一个想法,使用WMI。
每个一段时间,比如UPS可以维持时间的1/3,检查电源信息,当使用UPS时,保存需要的数据,当程序启动时,读取这些数据。
@碧落星痕: 现在就是在代码中用的 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.
你可以考虑使用内存数据库来保存即时信息
你可以尝试使用内存数据库来保存即时信息,在百度上去查查资料嘛!
好的,谢谢,我先去了解下内存数据库
第二个问题考虑添加TimeStamp字段控制数据;
你好,数据库表中已有字段TimeStamp,但是如果两个客户端同时操作,当执行到比对TimeStamp时的值还是相等的,会有这种情况,该如何解决
@Set sail: 如果一个用户改了TimeStamp 必然造成这个字段的变化,获取变化就意味这有人已经改动了