简单方法:
1、在服务器的数据库中建一张表Data_Sync_Sql(包含的字段:ID(递增)、SQL、UploadStore)。在门店的系统信息表(一般一个系统都有一个系统信息表)增加一条配置,用于存储当前门店的上次从服器读取SQL文本的最大ID。
2、门店录入数据时,将对应的SQL语句文本插入到服务器的Data_Sync_Sql表。
3、在每个门店和服务器中的数据库中建一个定时触发器,每隔一段时间从服务器中的Data_Sync_Sql表(从上次读取的最大ID+1开始,UploadStore<>当前门店)读取SQL文本并执行。
注:第3步如果每个门店去建触发器不现实,可以在服务器上做一个小程序(或服务)来代替。
定时任务,用程序可以实现。从门店服务器查询一个时间段的数据(比如:当天或最近两小时的)插入到总部服务器,五分钟或其他时间规则定时触发程序。我们使用的 Quartz.dll 类库做的定时任务,也是两个服务器之间同步数据。
最近我也在学习Quartz,有代码可以学习一下吗,我这是多任务的
@老男孩:
Global 类里的代码负责调用。
protected void Application_Start(object sender, EventArgs e) { if (HttpContext.Current.Request.ServerVariables["SERVER_NAME"].ToLower() == "by.stonebuy.com") { try { ISchedulerFactory sf = new StdSchedulerFactory(); IScheduler scheduler = sf.GetScheduler();
// 发送短信 JobDetail jobSentMsg = new JobDetail("三十分钟发送一次短信", "jobSentMsg", typeof(JobSentMsg)); CronTrigger triggerSentMsg = new CronTrigger("发送短信", "triggerSentMsg", "0 0/30 * * * ?"); scheduler.ScheduleJob(jobSentMsg, triggerSentMsg); // 同步支付记录 JobDetail jobPayInfo = new JobDetail("同步支付记录", "jobPayInfo", typeof(JobPayInfo)); CronTrigger triggerPayInfo = new CronTrigger("支付记录", "triggerPayInfo", "0 30 8 * * ?"); scheduler.ScheduleJob(jobPayInfo, triggerPayInfo); scheduler.Start(); } catch (Exception ex) { LogHelper.Write(ex.Message); } } }
另外这两个类负责业务实现。这两个类要继承 IJob,并实现 Execute(JobExecutionContext context)。
public class JobSentMsg : IJob { /// <summary> /// 发送短信 /// </summary> /// <param name="context"></param> public void Execute(JobExecutionContext context) { try { LogHelper.Write("发送短信开始"); Custer_SentMsgBLL.Custer_SentMsg_AutoSent(); LogHelper.Write("发送短信完成"); } catch (Exception e) { LogHelper.Write(e.Message); } } } public class JobPayInfo : IJob { /// <summary> /// 同步支付记录 /// </summary> /// <param name="context"></param> public void Execute(JobExecutionContext context) { try { LogHelper.Write("同步支付记录开始"); New_PayInfoBLL.New_PayInfo_SyncNew_PayInfo(); LogHelper.Write("同步支付记录完成"); } catch (Exception e) { LogHelper.Write(e.Message); } } }
我们也是多任务,我只列了两个供你参考。
@guwoow: 非常感谢
B/S现式, 都录入到一个服务器上,不要同步最简单.
废掉各个门店的服务器。直接上传到总服务器。 静态数据(无需同步)量大也可以在分门店架设服务器
总部提供一个wcf或者webservice,分店做一个windows服务.分店的windows服务定时请求wcf .将数据推送到总部服务器,
然后分店可以可以将总部其它门店的数据通过wcf 同步到本地 .OK .非常简单....代码也容易..so easy
定时任务,然后guid做主键,如果是SQL SERVER,采用SqlBulkCopy做同步。
另外,可以看下发布订阅。
看同步的时间间隔呗。如果每天晚上可以用来做同步,可选的方案就多了。
路过学习
后来用microsoft sync framework解决, 但仍有不少麻烦