实例介绍
【实例简介】
【实例截图】
【核心代码】
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 } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论