首页 新闻 会员 周边 捐助

客户端有个winform系统,断网的时候吧数据存到本地,联网后再提交到服务器,不知道应该怎么设计,求具体思路

0
悬赏园豆:10 [已解决问题] 解决于 2019-07-02 14:07

客户端有个winform系统,

断网的时候想把数据存到本地,等联网后再提交到服务器,

我的想法是:

1:服务器一个数据库

2:客户端一个数据库

当检测到断网后,所有提交的数据存到本地,想法是这样想的,但总感觉数据会对不上

不知道具体应该怎么设计,求各位指点

 

我的想法:

本地数据库的每个表我都加一个字段,数据int类型(data_type)

每次添加操作的时候都判断一下是否联网,

如果联网,sql请求服务器链接,将数据存到服务器数据库
如果断网,sql请求本地链接,将数据存到本地数据库,data_type=1

新加一个同步功能按钮,将所有数据库数据状态data_type=1的数据添加到服务器表中,同步过的数据状态data_type更新为2

大da脸的主页 大da脸 | 初学一级 | 园豆:73
提问于:2019-06-28 15:03

为何不两个地方都储存数据,然后使用sql同步备份不久好了,类似为了防止数据丢失,进行的双机备份

但乱红尘 5年前

@但乱红尘: 客户端正用着,啪叽断网了,线上的数据库无法提交,是不是要保存到本地处理?

大da脸 5年前

@大da脸: 我得意思是,无论断不断网,本地都进行备份就好啦,就像会长说的,可以那样处理一波

但乱红尘 5年前

@但乱红尘: 服务器的数据库和本地数据库唯一不同的是 ,有一个患者表,线上的是导医添加进去的,本地是自己添加进去的

大da脸 5年前
< >
分享
最佳答案
1

这是一个很大的工程,某种程度上来说,开发成本甚至于超过你这套系统的开发成本。
如果你想要一个很通用的解决方法的话。需要处理的问题太多了。
如果你还是想开发,挑战一下自己,无所谓成本。
那么,一个个问题列出来,能接受的代价,如何解决这个问题。

我就举几个简单的例子,如果你要考虑断网,

  1. 那么所有的基础资料都必须本地全量存储。
  2. 所有的单据号,都必须设计一个规则来保证唯一性,没办法用服务器规则避免重复。
  3. 查询历史数据的功能可能不可用,除非你本地存储所有服务器数据。
  4. 那要服务器何用,备份数据吗?
  5. 或者当断网是,只有10%的软件功能可用,那就容易一些。
  6. 如果要保证100%可用,基本你这就是个单机系统了。
收获园豆:10
爱编程的大叔 | 高人七级 |园豆:30844 | 2019-06-29 10:03
其他回答(2)
0

给每行数据加版本号,如果两地版本号不一致则版本号高的替换掉版本号低的。注意删除数据的处理,可能需要一个如-1这样的特殊版本号或其它标志。

会长 | 园豆:12463 (专家六级) | 2019-06-28 15:19

这样行不行?

每个表我都加一个字段,数据int类型(data_type)

每次添加操作的时候都判断一下是否联网,

如果联网,sql请求服务器链接,将数据存到服务器数据库,data_type=0
如果断网,sql请求本地链接,将数据存到本地数据库,data_type=1

新加一个同步功能按钮,将所有数据库数据状态为1的数据添加到服务器表中,同步过的数据状态data_type更新为2

支持(0) 反对(0) 大da脸 | 园豆:73 (初学一级) | 2019-06-28 17:37

@大da脸: 删除和修改呢?要考虑吗,你说的只是考虑了新增

支持(0) 反对(0) 会长 | 园豆:12463 (专家六级) | 2019-06-28 18:16

@会长: 本地的只是临时存储,主要是为了同步到服务器数据库

支持(0) 反对(0) 大da脸 | 园豆:73 (初学一级) | 2019-06-28 19:17
0

存储本地为主,服务器是用来同步, 将本地自升id保存到服务器的自定义的一个字段ids中,检查本地id和服务器自定义字段中ids的总数和最后一个,不一样时,比对少了哪个,再上传

ifendou | 园豆:54 (初学一级) | 2019-07-02 22:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册