作为一个完整的整体信息化解决方案需要有足够强大的各种功能,这些功能相对独立,又互相依存。当有需要这样的功能时可以随时拿出来用,适当修改一下就可以满足要求。只有这样才能快速开发各种信息化系统,才能满足各种客户的需求。

同步数据需要解决的问题主要有:

01:全国性大型集团公司的信息化改造项目会涉及到非常多的分公司网点的客户端需要同步数据的各种需求,这个已经超越了人工能处理好的极限。
02:网点非常多时,往往由于业务的特殊性会有能离线作业的需要,网络故障、网络带宽不理想时都可以进行离线处理的工作流程需要。
03:也由于网络安全原因、工作特殊原因,必须有些数据需要在本地网络里处理好,然后通过特殊专线等进行定时上传上报业务数据。
04:手持移动设备等、由于工作环境没有实时的互联网条件、可能也需要在离线条件下处理好数据,连接上网络时再把数据上传到总部。
05:有从大型数据库同步到桌面数据库的需要,例如服务器是SQLServer的、客户端是SQLite的。
06:也有可能是服务器与服务器之间的数据同步,例如生产主要数据库同步到统计数据库,同步到查询数据库里。
07:服务器上的总部数据库可能很庞大,每个网点可能只需要同步部分数据库,甚至是特殊限制的sql语句获取的数据部分需要同步。
08:若需要同步的数据比较多时,由于网络带宽、服务器的稳定性考虑,需要有提供批次获取数据的功能,可以分批获取数据。
09:表结构有变动时;有增加、有减少、有变更是、不要有问题故障发生;可以平稳升级、可以平稳同步数据。
10:若有上万信息终端,若没有数据就不需要进行任何sql语句查询了,减轻中心数据库查询压力。
11:可以访问的库、允许同步的表进行权限控制,防止越权获取不应该看到的数据。
12:接口调用的安全性保证、如何防止恶意调用等,对一个对外开放的接口,这些都需要考虑风险。
13:升级同步还可以能灵活扩展、能执行SQL语句,能编写C#逻辑控制代码。
14:同步程序可以在后台进行、不影响主要业务功能、不影响业务操作。
15:代码简洁、好维护、好调试、好改进,好快速增加同步额外的数据表等。

参考代码如下:

//-----------------------------------------------------------------
// All Rights Reserved , Copyright (C) 2015 , Hairihan TECH, Ltd.
//-----------------------------------------------------------------using System;
using System.Collections.Specialized;
using System.Data;
using System.Net;
using System.Text;
using Newtonsoft.Json;namespace DotNet.Win
{using DotNet.Business;using DotNet.Utilities;/// <summary>/// 数据同步类/// </summary>public partial class Synchronous{/// <summary>/// 远程数据同步的工具类/// </summary>/// <param name="fromDataBase">从服务器的哪个数据库获取数据</param>/// <param name="tableName">同步哪个表</param>/// <param name="primaryKeys">表的主键是什么</param>/// <param name="modifiedOn">同步的更新时间</param>/// <param name="toDataBaseDbType">同步到本地什么类型的数据库里?</param>/// <param name="dbConnection">同步的目标数据库连接方式?</param>/// <returns>影响行数</returns>public static int SynchronousTable(string fromDataBase, string tableName, string[] primaryKeys, DateTime? modifiedOn, CurrentDbType toDataBaseDbType, string dbConnection){int result = 0;// 输入参数检查if (primaryKeys == null){return result;}int topLimit = 200;DataTable dataTable = null;IDbHelper dbHelper = null;dbHelper = DbHelperFactory.GetHelper(toDataBaseDbType, dbConnection);SQLBuilder sqlBuilder = new SQLBuilder(dbHelper);while (topLimit == 200){string url = BaseSystemInfo.WebHost + "WebAPIV42/API/Synchronous/GetTopLimitTable";WebClient webClient = new WebClient();NameValueCollection postValues = new NameValueCollection();postValues.Add("userInfo", BaseSystemInfo.UserInfo.Serialize());postValues.Add("systemCode", BaseSystemInfo.SystemCode);postValues.Add("securityKey", BaseSystemInfo.SecurityKey);postValues.Add("dataBase", fromDataBase);postValues.Add("tableName", tableName);postValues.Add("topLimit", topLimit.ToString());postValues.Add("modifiedOn", modifiedOn.Value.ToString(BaseSystemInfo.DateTimeFormat));// 向服务器发送POST数据byte[] responseArray = webClient.UploadValues(url, postValues);string response = Encoding.UTF8.GetString(responseArray);if (!string.IsNullOrEmpty(response)){dataTable = (DataTable)JsonConvert.DeserializeObject(response, typeof(DataTable));}int r = 0;// 出错的日志都需要能保存起来,这样有问题的可以找出原因来。for (r = 0; r < dataTable.Rows.Count; r++){// 先删除数据,修改的、新增的、都删除后添加来处理,问题就简单化了// dbHelper.ExecuteNonQuery("DELETE FROM " + tableName + " WHERE " + primaryKey + " = '" + dataTable.Rows[r][primaryKey].ToString() + "'");sqlBuilder.BeginDelete(tableName);for (int i = 0; i < primaryKeys.Length; i++){string primaryKey = primaryKeys[i];if (string.IsNullOrWhiteSpace(primaryKey)){sqlBuilder.SetWhere(primaryKey, dataTable.Rows[r][primaryKey].ToString());}}sqlBuilder.EndDelete();// 然后插入数据sqlBuilder.BeginInsert(tableName);for (int i = 0; i < dataTable.Columns.Count; i++){// 这里能判断目标表里是否有这个字段存在就更完美了。sqlBuilder.SetValue(dataTable.Columns[i].ColumnName, dataTable.Rows[r][dataTable.Columns[i].ColumnName]);}sqlBuilder.EndInsert();if (DateTime.Parse(dataTable.Rows[r][BaseBusinessLogic.FieldModifiedOn].ToString()) > modifiedOn.Value){modifiedOn = DateTime.Parse(dataTable.Rows[r][BaseBusinessLogic.FieldModifiedOn].ToString());}result++;}topLimit = dataTable.Rows.Count;}return result;}}
}

C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 大型软件系统客户端数据同步的问题解决...相关推荐

  1. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 所有的基础数据都可以恢复删除...

    客户的需求如下: 所有基礎信息需要記錄創建人,創建時間,更改人,更改時間,刪除人,刪除時間.有停用基礎信息功能(停用不是刪除,只是暫時停用). 基礎信息可以查出已經刪除的信息(有選項可以選擇),有方法 ...

  2. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 基于数据库资源的多语言实现...

    以前的开发平台里,是用xml语言包实现了多语言功能,现在新的平台里进行了调整,把多语言包资源放在数据库表里实现了. 我们系统预留了多语言的配置全局变量.可以通过配置这个参数达到切换多语言的目的 我们在 ...

  3. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 能支撑10万以上客户端的数据同步下载问题...

    庞大的业务系统,特别是需要有离线作业操作支持的核心业务系统,需要有强大的基础数据同步功能,基础数据有在增加.有在变动.有在失效,同时有大量的客户端全天侯的在连接服务器.不间断的在处理核心数据. 经过2 ...

  4. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 角色权限的配置页面改进优化...

    往往开发的人不是维护的人,开发的单位不是维护的单位.信息的畅通沟通交流很多时候会有打折.扭曲.甚至是容易得到歪解.配置错业务操作权限.为了防止发生没必要的麻烦,甚至是发生重大错误,我们的软件需要不断换 ...

  5. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 服务器之间的接口通讯功、信息交换...

    1:当远程调用方法时,会有很多种可能性发生.接口调用之后,发生错误是什么原因发生的?反馈给开发人员需要精确.精准.高效率,这时候若能返回出错状态信息的详细信息,接口之间的调用就会非常顺利,各种复杂问题 ...

  6. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 防止脱库、防止篡改数据...

    一些无关紧要的数据.被脱库了什么的, 也没啥的,但是有些比较重要的数据被脱库了,虽然可能没严重的损失,但是会很丢人一样的,被爆出脱库了什么的,总是会比较难为情的,说实话也是蛮丢人的,能多防范就多防范, ...

  7. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 员工离职管理

    当公司有几万人,上千家加盟网点,几个庞大的直属分公司后,系统账户的有效管理也是一个头疼的问题,把所有的帐户及时进行科学的管理,有人员离职时及时进行记录,防止离职人员的系统账户有各种安全漏洞. 谁什么时 ...

  8. C#.NET 大型通用信息化系统集成快速开发平台 4.6 版本 - SSO单点登录接口

    当开发的系统多了.用户多了.合作伙伴多了.对接厂商多了.开发人员多了.部署的服务器也多了,各种安全问题就暴露出来了. 如何安全的把这些系统集成在一起?实现集群的单点登录.严格统一的用户安全体系管理? ...

  9. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 密码强化、网络安全强化...

    公司的系统庞大后,用户数量也庞大,容易引起各种网络安全相关问题,需要把每个用户的网络安全意识都提高,由于历史原因有些用户的密码过于简单,很容易被猜到,引起很多没必要的麻烦. 系统登录成功后,检查密码复 ...

  10. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 角色成员功能的改进支持公司加入到角色...

    我们公司有1万多个网点,每个网点都可以看成是一个公司,公司对不同的网点有不同的策略,商业逻辑,每个网点的人员也都是在不断变化,全国有接近10万从业人员,当我们设计好业务逻辑程序后,不可能因为这些人员的 ...

最新文章

  1. zookeeper集群启动报错:Cannot open channel to * at election address /ip:3888
  2. CCAI 2019 | Shai Ben-David:人工智能的可学习性能否判定?
  3. wps电脑版_WPS的前前前前身,是一根绳子?懂点历史没坏处
  4. leetCode题解之反转二叉树
  5. Shell-实际业务操作01
  6. 使用Spring AOP重试方法执行
  7. JEECG v2.3 发布,基于代码生成器的智能开发框架
  8. 全国唯一高校!武汉大学首开鸿蒙系统课程
  9. 中国人去日本买电饭煲令人痛心!董明珠:难道我泱泱大国造不出吗?
  10. allure 测试报告本地打开_Pytest和Allure测试框架(二)
  11. 医疗机构被勒索软件攻击的可能性是金融机构的114倍
  12. HALCON: HALCON 20.11.0.0 Progress主要新特性
  13. Android 面试(四):Android Service 你真的能应答自如了吗?
  14. iOS上架被拒理由及相关解决方案记录
  15. 【前端】CSS使用总结
  16. 应该如何理解mobx_MobX入门
  17. 7-19 求链式线性表的倒数第K项
  18. hermite插值matlab代码,hermite插值以及两种MATLAB程序
  19. itchat获取群聊用户的信息
  20. 肿瘤基因组变异相关概念

热门文章

  1. 怎样开图纸便宜_在县城开一家儿童乐园怎么样?开多大面积合适?投资需要多少钱?...
  2. 计算机法宝,计算机专业英语学习法宝.doc
  3. 店宝宝电脑版_母婴店主干货分享:母婴店利润究竟有多大?
  4. composer killed while updating or install
  5. Python爬虫入门学习线路图2019最新版
  6. Winform解决界面重绘闪烁的问题
  7. Linux内核4.17再获捷报
  8. dubbo源码系列之filter的前生
  9. Springmvc返回中文字符乱码问题
  10. 【云安全课程】云平台使用安全