在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#网络编程 → 数据同步服务程序源码(含数据库脚本)

数据同步服务程序源码(含数据库脚本)

C#网络编程

下载此实例
  • 开发语言:C#
  • 实例大小:0.99M
  • 下载次数:40
  • 浏览次数:290
  • 发布时间:2016-12-07
  • 实例类别:C#网络编程
  • 发 布 人:libaofeng_1_1
  • 文件格式:.7z
  • 所需积分:20
 相关标签: 服务 数据

实例介绍

【实例简介】

【实例截图】

【核心代码】


using SQLDAL;
using System;
using System.Configuration;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using Data_Syn.model;
using System.Xml.Linq;
using System.Data.OleDb;

namespace Data_Syn
{
    public partial class Frm_Main : Form
    { 
        write_log write_log = new write_log();
        string str_company_name = "";
        Thread DataThread = null;//数据同步线程
        string s_db = "";//客户数据库
        string c_db = "";//自助收银数据库
        string server_conn = "";
        string client_conn = "";
        List<Model_Xml> lm = new List<Model_Xml>();//存储获取XML内容
        DateTime dt2;
        DataBaseLayer db = new DataBaseLayer();
        public Frm_Main()
        {
            InitializeComponent();
            dt2 = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            //DataThread = new Thread(new ThreadStart(Data_Transfer));
        }

      
        #region Form_Monitor
       
        private void alert(string msg)
        {
            MessageBox.Show(msg, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (e.CloseReason == CloseReason.UserClosing)//当用户点击窗体右上角X按钮或(Alt   F4)时 发生            
            {
                e.Cancel = true;
                this.ShowInTaskbar = false;
                this.notifyIcon1.Icon = this.Icon;
                this.Hide();
            }

        }

        private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                mymenu.Show(System.Windows.Forms.Cursor.Position.X, System.Windows.Forms.Cursor.Position.Y);
                mymenu.Show();
            }

            if (e.Button == MouseButtons.Left)
            {
                this.Visible = true;
                mymenu.Hide();
                this.Icon = Resource1._20151104082741597_easyicon_net_256;
                this.WindowState = FormWindowState.Normal;
            }
        }

        private void mymenu_Click(object sender, EventArgs e)
        {

        }

        private void mymenu_Opening(object sender, System.ComponentModel.CancelEventArgs e)
        {

        }

        private void mymenu_child_Click(object sender, EventArgs e)
        {
            if (DataThread != null)
            {
                DataThread.Abort();//中止线程
            }
           // DataThread
            Application.Exit();
        }

        private void Form1_MinimumSizeChanged(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Normal && this.Visible == true)
            {

                this.notifyIcon1.Visible = true;//在通知区显示Form的Icon 

                this.WindowState = FormWindowState.Minimized;

                this.Visible = false;

                this.ShowInTaskbar = false;//使Form不在任务栏上显示 

            }

        }
        #endregion
        //开始同步数据
        private void btn_conllection_Click(object sender, EventArgs e)
        {
            #region Model XML初始化            
            //lm赋值
            MX_init();
            #endregion
            #region 点击同步按钮重新获取配置文件相关信息
            str_company_name = ConfigurationManager.AppSettings["Company_Name"].ToString();
            s_db = ConfigurationManager.ConnectionStrings["Server_Db_Name"].ToString();//客户数据库名称
            c_db = ConfigurationManager.ConnectionStrings["Client_Db_Name"].ToString();//自助收银数据库名称
          //string Test_1=  ConfigurationManager.ConnectionStrings["ServerConSql"].ToString();
            server_conn = ConfigurationManager.ConnectionStrings["ServerConSql"].ToString();//连接客户数据库字符串
            client_conn = ConfigurationManager.ConnectionStrings["ClientConSql"].ToString();//连接客户数据库字符串
            #endregion
            btn_conllection.Enabled = false;
            btn_stop.Enabled = true;           
            try
            { 

                //启动线程
                DataThread = new Thread(new ThreadStart(Data_Transfer));
                DataThread.IsBackground = true;
                DataThread.Start();
                 #region
             //new Thread((ThreadStart)(delegate()
             //   {
                  
                //    txt_log.BeginInvoke((MethodInvoker)delegate()
                //    {
                //        txt_log.Text  = str_company_name  " " System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")   " 开始同步:";
                //        txt_log.Text  = Environment.NewLine;
                //            txt_log.Text  = str_company_name   ":";
                //           #region 此处添加同步方法
                //            #endregion
                //            txt_log.Text  = Environment.NewLine;
                       
                //    });
                //})).Start();
                    #endregion
            }
            catch (Exception e3)
            {
                
                new Thread((ThreadStart)(delegate()
                {

                    txt_log.BeginInvoke((MethodInvoker)delegate()
                    {
                        write_log.write_log_txt(str_company_name   "_Exception:"   e3.Message.ToString());
                        #region txt_log超过最大长度,提示消息无法写入,清空重新写入
                        try
                        {
                            if (txt_log.Lines.Count() > 100)
                            {
                                txt_log.Text = "";
                            }
                            txt_log.Text  = str_company_name   "_Exception:"   e3.ToString();
                            txt_log.Text  = Environment.NewLine;
                        }
                        catch
                        {
                            txt_log.Text = "";
                            txt_log.Text  = str_company_name   "_Exception:"   e3.Message.ToString();
                            txt_log.Text  = Environment.NewLine;
                        }
                        #endregion
                    });
                }))
        .Start();
            }
        }
        //停止同步数据
        private void btn_stop_Click(object sender, EventArgs e)
        {
            DataThread.Abort();//中止线程
            btn_stop.Enabled = false;
            btn_conllection.Enabled = true;
            //btn_stop.ForeColor = Color.White;
            txt_log.Text = "";
            lab2.Text = "";
        }

        private void label3_Click(object sender, EventArgs e)
        {

        }

        private void Frm_Main_Load(object sender, EventArgs e)
        {
            //str_company_name = ConfigurationManager.AppSettings["Client_Company_Name"].ToString();
            //s_db = ConfigurationManager.ConnectionStrings["Server_Db_Name"].ToString();//客户数据库名称
            //c_db = ConfigurationManager.ConnectionStrings["Client_Db_Name"].ToString();//自助收银数据库名称
            //DataBaseLayer.server_conn = ConfigurationManager.ConnectionStrings["ServerConSql"].ToString();//连接客户数据库字符串
            //DataBaseLayer.client_conn = ConfigurationManager.ConnectionStrings["ClientConSql"].ToString();//连接客户数据库字符串

            //         <add name="Server_Db_Name" connectionString="wh_old"/>
    //<!--自助收银设备数据库名称-->
    //<add name="Client_Db_Name" connectionString="wh_new"/>
        }
        #region 数据同步方法
        public void Data_Transfer()
        {
            #region 开始同步
            new Thread((ThreadStart)(delegate()
            {

                txt_log.BeginInvoke((MethodInvoker)delegate()
                {
                    //write_log.write_log_txt("--" str_company_name   "开始同步"   "--");
                    #region txt_log超过最大长度,提示消息无法写入,清空重新写入
                    try
                    {
                        if (txt_log.Lines.Count() > 100)
                        {
                            txt_log.Text = "";
                        }
                        txt_log.Text  = "--"   str_company_name   "开始同步"   "--";
                        txt_log.Text  = Environment.NewLine;
                    }
                    catch
                    {
                        txt_log.Text = "";
                        txt_log.Text  = "--"   str_company_name   "开始同步"   "--";
                        txt_log.Text  = Environment.NewLine;
                    }
                    #endregion
                });
            })).Start();
         
            #endregion
           
            while (true)
            {
                //添加间隔时间判断           
                DateTime dt1 = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                //DateTime dt2 = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
                TimeSpan ts = dt1.Subtract(dt2);
                int key_i = 2;
                key_i = Int32.Parse(ts.TotalSeconds.ToString().Trim());
                if (key_i >= Int32.Parse(txt_time.Text.ToString().Trim()))
                {

                    try
                    {
                        //Thread clientService = new Thread(ReceiveClient);
                        //clientService.IsBackground = true;
                        //clientService.Start(client);                    
                        try
                        {
                            //数据同步方法
                            Data_pro(lm, server_conn, client_conn);
                            dt2 = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                        }
                        catch
                        {

                            continue;
                        }
                    }
                    catch (Exception ex)
                    {
                        new Thread((ThreadStart)(delegate()
                        {

                            txt_log.BeginInvoke((MethodInvoker)delegate()
                            {
                                write_log.write_log_txt(str_company_name   "_Exception:"   ex.Message.ToString());
                                #region txt_log超过最大长度,提示消息无法写入,清空重新写入
                                try
                                {
                                    if (txt_log.Lines.Count() > 100)
                                    {
                                        txt_log.Text = "";
                                    }
                                    txt_log.Text  = str_company_name   "_Exception:"   ex.Message.ToString();
                                    txt_log.Text  = Environment.NewLine;
                                }
                                catch
                                {
                                    txt_log.Text = "";
                                    txt_log.Text  = str_company_name   "_Exception:"   ex.Message.ToString();
                                    txt_log.Text  = Environment.NewLine;
                                }
                                #endregion
                            });
                        }))
            .Start();
                    }

                }
            }
        }
    
        #endregion
        #region 传输数据处理
        public void Data_pro(List<Model_Xml> lx,string server_conn,string client_conn)
        {
            int flag_exists = 0;
            int flag_exists_another = 0;
            string flag_sql="";
            string flag_sql_another="";
            string insert_sql = "";
            string update_sql = "";           
            foreach (var e in lx)
            { 
              //获取客户数据库数据集
                string str = @"select " e.Flag_id "," e.Field_str  " from " e.Table_s ;
                DataTable dt = new DataTable() ;
                try
                {
                    dt.Clear();
                    dt = db.Get_ExecuteDataset_OLE(server_conn, str).Tables[0];
                    //dt = Get_ExecuteDataset_OLE(server_conn, str).Tables[0];
                }
                catch(Exception e1)
                {
                    new Thread((ThreadStart)(delegate()
                    {

                        txt_log.BeginInvoke((MethodInvoker)delegate()
                        {
                            write_log.write_log_txt(str_company_name   "_Exception:"   e1.Message.ToString() "--SQL:--" str);
                            #region txt_log超过最大长度,提示消息无法写入,清空重新写入
                            try
                            {
                                if (txt_log.Lines.Count() > 100)
                                {
                                    txt_log.Text = "";
                                }
                                txt_log.Text  = str_company_name   "_Exception:"   e1.Message.ToString() "--SQL:--" str;
                                txt_log.Text  = Environment.NewLine;
                            }
                            catch
                            {
                                txt_log.Text = "";
                                txt_log.Text  = str_company_name   "_Exception:"   e1.Message.ToString()   "--SQL:--"   str;
                                txt_log.Text  = Environment.NewLine;
                            }
                            #endregion
                        });
                    }))
        .Start();
                   continue;
                }
                //对同步数据进行判断
                try
                {
                    if (dt.Rows.Count > 0)
                    {
                        for (int i = 0; i < dt.Rows.Count; i  )
                        {
                            //判断自助收银设备表里面有没有该记录
                            //flag_sql = @"select count(" e.Flag_id ")  from " e.Table_c  " where " e.Flag_id  "='" dt.Rows[i][e.Flag_id.ToString()].ToString() "'";
                            flag_sql = @"select count(*)  from "   e.Table_c   " where "   e.Flag_id   "='"   dt.Rows[i][e.Flag_id.ToString()].ToString()   "'";
                            flag_exists = db.GetExecuteDataset_Int_OLE(client_conn, flag_sql);
                            //存在该记录,则对其它字段进行判断修改
                            if (flag_exists > 0)
                            {
                                #region
                                //对其它字段逐个判断,字段值是否修改,如果修改,则同步更新收银设备数据库的基础信息
                                string[] Str_Array = e.Field_str.Trim().Split(',');
                                foreach (string sarr in Str_Array)
                                {
                                   
                                    //依次查询自动收银设备数据库的字段
                                    //flag_sql_another = @"select count(*) from "   e.Table_c   " where "   e.Flag_id   "='"   dt.Rows[i][e.Flag_id.ToString()].ToString()   "' and "   sarr   "='";
                                    flag_sql_another = @"select count(*) from "   e.Table_c   " where "   e.Flag_id   "='"   dt.Rows[i][e.Flag_id.ToString()].ToString()   "' and "   sarr.Trim()   "='"   dt.Rows[i][sarr.Trim()].ToString()   "'";
                                    //依次判断客户视图其它字段和自助收银设备其它字段的值是否一致,一致则不做处理,不一致,则修改该值
                                    flag_exists_another = db.GetExecuteDataset_Int_OLE(client_conn, flag_sql_another);
                                    //数值不一致
                                    if (flag_exists_another == 0)
                                    {
                                        update_sql = @"update "   e.Table_c   " with(rowlock)  set "   sarr.Trim()   "='"   dt.Rows[i][sarr.Trim()].ToString()   "' where "   e.Flag_id   "='"   dt.Rows[i][e.Flag_id.ToString()].ToString()   "'";
                                        db.ExecuteNonQuery_OLE(client_conn, update_sql);
                                        write_log.write_log_txt(str_company_name   ":"   e.Table_c   "成功修改一条记录。"   "SQL:"   update_sql);

                                        new Thread((ThreadStart)(delegate()
                                        {

                                            txt_log.BeginInvoke((MethodInvoker)delegate()
                                            {
                                                #region txt_log超过最大长度,提示消息无法写入,清空重新写入
                                                try
                                                {
                                                    if (txt_log.Lines.Count() > 100)
                                                    {
                                                        txt_log.Text = "";
                                                    }
                                                    txt_log.Text  = str_company_name   ":"   e.Table_c "."   sarr.Trim()  "数据已修改";
                                                    txt_log.Text  = Environment.NewLine;
                                                }
                                                catch
                                                {
                                                    txt_log.Text = "";
                                                    txt_log.Text  = str_company_name   ":"   e.Table_c "."   sarr.Trim()   "数据已修改";
                                                    txt_log.Text  = Environment.NewLine;
                                                }
                                                #endregion
                                            });
                                        }))
       .Start();
                                    }
                                    //数值一致,不做处理{}
                                    if (flag_exists_another >0)
                                    {
                                        new Thread((ThreadStart)(delegate()
                                        {

                                            txt_log.BeginInvoke((MethodInvoker)delegate()
                                            {
                                                #region txt_log超过最大长度,提示消息无法写入,清空重新写入
                                                try
                                                {
                                                    if (txt_log.Lines.Count() > 100)
                                                    {
                                                        txt_log.Text = "";
                                                    }
                                                    txt_log.Text  = str_company_name   ":"   e.Table_c   "." sarr.Trim()   "完成同步数据检查,数据一致。";
                                                    txt_log.Text  = Environment.NewLine;
                                                }
                                                catch
                                                {
                                                    txt_log.Text = "";
                                                    txt_log.Text  = str_company_name   ":"   e.Table_c   "."   sarr.Trim()   "完成同步数据检查,数据一致。";
                                                    txt_log.Text  = Environment.NewLine;
                                                }
                                                #endregion
                                            });
                                        }))
          .Start();
                                    }
                                }


                                #endregion
                            }
                            //不存在,进行插入操作
                            if (flag_exists == 0)
                            {
                                insert_sql = @"insert into "   e.Table_c   "("   e.Flag_id   ","   e.Field_str   ")  select "   e.Flag_id   ","   e.Field_str   " from "   e.Table_s   " where "   e.Flag_id   "='"   dt.Rows[i][e.Flag_id.ToString()].ToString()   "'";
                               db.ExecuteNonQuery_OLE(client_conn, insert_sql);
                               new Thread((ThreadStart)(delegate()
                               {

                                   txt_log.BeginInvoke((MethodInvoker)delegate()
                                   {
                                       #region txt_log超过最大长度,提示消息无法写入,清空重新写入
                                       try
                                       {
                                           if (txt_log.Lines.Count() > 100)
                                           {
                                               txt_log.Text = "";
                                           }
                                           txt_log.Text  = str_company_name   ":"   e.Table_c "成功插入一条新记录。";
                                           txt_log.Text  = Environment.NewLine;
                                       }
                                       catch
                                       {
                                           txt_log.Text = "";
                                          txt_log.Text  = str_company_name   ":"   e.Table_c "成功插入一条新记录。";
                                           txt_log.Text  = Environment.NewLine;
                                       }
                                       #endregion
                                   });
                               }))
       .Start();
                            }

                        }
                    }
                }
                catch (Exception e2)
                {
                    new Thread((ThreadStart)(delegate()
                    {

                        txt_log.BeginInvoke((MethodInvoker)delegate()
                        {
                            write_log.write_log_txt(str_company_name   "_Exception:"   e2.Message.ToString()   "--SQL:--flagsql:"   flag_sql   "--"   "flag_sql_another:"   flag_sql_another   "--"   "update_sql:"   update_sql   "--"   "insert_sql:"   insert_sql);
                            #region txt_log超过最大长度,提示消息无法写入,清空重新写入
                            try
                            {
                                if (txt_log.Lines.Count() > 100)
                                {
                                    txt_log.Text = "";
                                }
                                txt_log.Text  = str_company_name   "_Exception:"   e2.Message.ToString()   "--SQL:--flagsql:"   flag_sql   "--"   "flag_sql_another:"   flag_sql_another   "--"   "update_sql:"   update_sql   "--"   "insert_sql:"   insert_sql;
                                txt_log.Text  = Environment.NewLine;
                            }
                            catch
                            {
                                txt_log.Text = "";
                                txt_log.Text  = str_company_name   "_Exception:"   e2.Message.ToString()   "--SQL:--flagsql:"   flag_sql   "--"   "flag_sql_another:"   flag_sql_another   "--"   "update_sql:"   update_sql   "--"   "insert_sql:"   insert_sql;
                                txt_log.Text  = Environment.NewLine;
                            }
                            #endregion
                        });
                    }))
        .Start();
                    continue;
                }
               
            }
        }
        #endregion
#region Model XML初始化
        public void MX_init()
        {
            lm.Clear();
            string all_path = Application.StartupPath;
            all_path  = "\\xml".Trim();
            all_path  = @"\"   "Data_Transfer.xml".Trim();
            XElement xe = XElement.Load(all_path);
            IEnumerable<XElement> elements = from noderecords in xe.Elements("table") select noderecords;
            foreach (XElement element in elements)
            {
               lm.Add(new Model_Xml
                {
                    Table_s = element.Element("table_s").Value,
                    Table_c = element.Element("table_c").Value,
                    Flag_id = element.Element("flag_id").Value,
                    Field_str = element.Element("field_str").Value
                });
            }
        }
#endregion




    }
}


标签: 服务 数据

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警