实例介绍
【实例简介】
【实例截图】
【核心代码】
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小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论