ab56a9bcf7
SVN-Revision: r240
3048 lines
184 KiB
C#
3048 lines
184 KiB
C#
using DevExpress.Utils;
|
||
using DevExpress.XtraEditors.Controls;
|
||
using DevExpress.XtraEditors.Repository;
|
||
using DevExpress.XtraGrid.Columns;
|
||
using Lskj.Control;
|
||
using MySql.Data.MySqlClient;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Data;
|
||
using System.Data.SqlClient;
|
||
using System.Drawing;
|
||
using System.Linq;
|
||
using System.Text.RegularExpressions;
|
||
using System.Windows.Forms;
|
||
|
||
|
||
namespace AFKAbutment
|
||
{
|
||
public partial class Form1 : Form
|
||
{
|
||
public Form1(string[] args)
|
||
{
|
||
arg = args;
|
||
this.FormClosed += Form1_FormClosed;
|
||
this.KeyDown += Form1_KeyDown;
|
||
InitializeComponent();
|
||
}
|
||
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
|
||
{
|
||
if (thread != null)
|
||
{
|
||
thread.Abort();
|
||
}
|
||
this.Dispose();
|
||
this.Close();
|
||
}
|
||
|
||
public string[] arg;
|
||
public bool rightClickExecute = false;
|
||
public System.Threading.Thread thread = null;
|
||
public bool isStop = false;
|
||
|
||
public System.Timers.Timer timer1 = new System.Timers.Timer();
|
||
public System.Timers.Timer timer2 = new System.Timers.Timer();
|
||
public System.Timers.Timer timer3 = new System.Timers.Timer();
|
||
|
||
public string separator = "Lserp$specialTag";//分割符
|
||
|
||
//初始化
|
||
private void Form1_Load(object sender, EventArgs e)
|
||
{
|
||
this.startBtn.Appearance.BackColor = Color.FromArgb(140, 208, 1);
|
||
this.startBtn.MouseHover += new EventHandler(OnStartBtn_MouseHover);
|
||
this.startBtn.MouseLeave += new EventHandler(OnStartBtn_MouseLeave);
|
||
this.stopBtn.MouseHover += new EventHandler(OnStoptBtn_MouseHover);
|
||
this.stopBtn.MouseLeave += new EventHandler(OnStopBtn_MouseLeave);
|
||
|
||
this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(OnTimer1_Elapsed);
|
||
this.timer2.Elapsed += new System.Timers.ElapsedEventHandler(OnTimer2_Elapsed);
|
||
this.timer3.Elapsed += new System.Timers.ElapsedEventHandler(OnTimer3_Elapsed);
|
||
//afk
|
||
afkSeverId.Text = IniHelper.Read("Setting.ini", "AFK", "serverName"); //地址
|
||
afkPortNumber.Text = IniHelper.Read("Setting.ini", "AFK", "port"); //端口
|
||
afkDataBase.Text = IniHelper.Read("Setting.ini", "AFK", "dbName");//数据库名
|
||
afkName.Text = IniHelper.Read("Setting.ini", "AFK", "user");//用户名
|
||
afkPassword.Text = IniHelper.Read("Setting.ini", "AFK", "password"); //密码
|
||
//ls
|
||
lsSeverId.Text = IniHelper.Read("Setting.ini", "LS", "serverName"); //地址
|
||
lsDataBase.Text = IniHelper.Read("Setting.ini", "LS", "dbName");//数据库名
|
||
lsName.Text = IniHelper.Read("Setting.ini", "LS", "user");//用户名
|
||
lsPassword.Text = IniHelper.Read("Setting.ini", "LS", "password"); //密码
|
||
//parameter
|
||
string time = IniHelper.Read("Setting.ini", "parameter", "time"); //间隔时间
|
||
if (string.IsNullOrEmpty(time)) time = "30";
|
||
if (Convert.ToInt32(time) < 30) time = "30";
|
||
intervalTime.Text = time;
|
||
intervalTime.LostFocus += new EventHandler(intervalTime_LostFocus);
|
||
if (arg.Length > 0)
|
||
{
|
||
if (arg[0].Equals("1"))
|
||
{
|
||
timer2.Interval = 10000;
|
||
timer2.Enabled = true;
|
||
}
|
||
}
|
||
InitializeDataSettings();
|
||
}
|
||
// <summary>
|
||
/// 时间间隔TextBox失去焦点事件
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
private void intervalTime_LostFocus(object sender, EventArgs e)
|
||
{
|
||
string checkStr = intervalTime.Text.ToString();
|
||
if (string.IsNullOrEmpty(checkStr)) intervalTime.Text = "30";
|
||
int check = Convert.ToInt32(intervalTime.Text.ToString());
|
||
if (check < 30)
|
||
{
|
||
intervalTime.Text = "30";
|
||
}
|
||
IniHelper.Write("parameter", "time", intervalTime.Text.ToString());
|
||
}
|
||
|
||
//判断右键列,是否要立刻同步数据
|
||
private void OnTimer3_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
|
||
{
|
||
timer3.Enabled = false;
|
||
bool isRecover = false;
|
||
if (!isStop)
|
||
{
|
||
isRecover = true;
|
||
}
|
||
DataTable synchronousTable = SqlHelper.ExecuteDataTable("select * from p_synchrTab where rightKeyTag='1' ORDER BY id");
|
||
if (synchronousTable.Rows.Count > 0)
|
||
{
|
||
if (rightClickExecute)
|
||
{
|
||
isStop = true;
|
||
timer1.Enabled = false;
|
||
RefreshLogUIThread("清空");
|
||
RefreshLogUIThread(DateTime.Now + "正在同步右键数据.\r\n");
|
||
//AFK》LS
|
||
DataRow[] performDr = synchronousTable.Select("directionTag" + "='0'");
|
||
this.getAfktoLs(performDr);
|
||
//LS》AFK
|
||
performDr = synchronousTable.Select("directionTag" + "='1'");
|
||
this.getLStoAFK(performDr);
|
||
|
||
string sql = "update p_synchrTab set rightKeyTag='0'";
|
||
SqlHelper.ExecuteNonQuery(sql);
|
||
//固定执行
|
||
DataTable dt = SqlHelper.ExecuteDataTable("select * from p_synchrTab where id='9999999'");
|
||
if (dt != null && dt.Rows.Count > 0)
|
||
{
|
||
string afterSql = dt.Rows[0]["afterSql"] + "";//同步完成后执行的sql
|
||
if (!string.IsNullOrWhiteSpace(afterSql)) SqlHelper.ExecuteNonQuery(afterSql);
|
||
}
|
||
RefreshLogUIThread(DateTime.Now + "同步右键数据结束.\r\n");
|
||
timer1.Enabled = true;
|
||
if (isRecover)
|
||
{
|
||
RefreshLogUIThread(DateTime.Now + "恢复同步.\r\n");
|
||
isStop = false;
|
||
}
|
||
else
|
||
{
|
||
RefreshLogUIThread(DateTime.Now + "请点击开始按钮恢复同步.\r\n");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
isStop = true;
|
||
RefreshLogUIThread("清空");
|
||
RefreshLogUIThread(DateTime.Now + "已暂停当前同步,正在同步右键数据.\r\n");
|
||
//AFK》LS
|
||
DataRow[] performDr = synchronousTable.Select("directionTag" + "='0'");
|
||
this.getAfktoLs(performDr, true);
|
||
//LS》AFK
|
||
performDr = synchronousTable.Select("directionTag" + "='1'");
|
||
this.getLStoAFK(performDr, true);
|
||
|
||
string sql = "update p_synchrTab set rightKeyTag='0'";
|
||
SqlHelper.ExecuteNonQuery(sql);
|
||
//固定执行
|
||
DataTable dt = SqlHelper.ExecuteDataTable("select * from p_synchrTab where id='9999999'");
|
||
if (dt != null && dt.Rows.Count > 0)
|
||
{
|
||
string afterSql = dt.Rows[0]["afterSql"] + "";//同步完成后执行的sql
|
||
if (!string.IsNullOrWhiteSpace(afterSql)) SqlHelper.ExecuteNonQuery(afterSql);
|
||
}
|
||
RefreshLogUIThread(DateTime.Now + "同步右键数据结束.\r\n");
|
||
if (isRecover)
|
||
{
|
||
RefreshLogUIThread(DateTime.Now + "恢复同步.\r\n");
|
||
isStop = false;
|
||
}
|
||
else
|
||
{
|
||
RefreshLogUIThread(DateTime.Now + "请点击开始按钮恢复同步.\r\n");
|
||
}
|
||
}
|
||
}
|
||
timer3.Enabled = true;
|
||
}
|
||
|
||
//被服务打开后主动执行点击同步暗流
|
||
private void OnTimer2_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
|
||
{
|
||
timer2.Enabled = false;
|
||
startBtn_Click(sender, e);
|
||
}
|
||
|
||
//循环同步操作
|
||
private void OnTimer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
|
||
{
|
||
rightClickExecute = false;
|
||
timer1.Enabled = false;
|
||
RefreshLogUIThread("清空");
|
||
//AFK》LS
|
||
DataTable synchronousTable = SqlHelper.ExecuteDataTable("select * from p_synchrTab where disableTag='true' and directionTag='0' ORDER BY id");
|
||
this.SynchroDataSingle(synchronousTable, DataDirection.AfkToLs);
|
||
//固定执行
|
||
try
|
||
{
|
||
DataTable dt = SqlHelper.ExecuteDataTable("select * from p_synchrTab where id='9999999'");
|
||
if (dt != null && dt.Rows.Count > 0)
|
||
{
|
||
string afterSql = dt.Rows[0]["afterSql"] + "";//同步完成后执行的sql
|
||
if (!string.IsNullOrWhiteSpace(afterSql)) SqlHelper.ExecuteNonQuery(afterSql);
|
||
}
|
||
}
|
||
catch (Exception)
|
||
{
|
||
}
|
||
//LS》AFK
|
||
synchronousTable = SqlHelper.ExecuteDataTable("select * from p_synchrTab where disableTag='true' and directionTag='1' ORDER BY id");
|
||
this.SynchroDataSingle(synchronousTable, DataDirection.LsToAfk);
|
||
// 获取中间日志表中报错信息
|
||
getErrorLine();
|
||
|
||
timer1.Enabled = true;
|
||
rightClickExecute = true;
|
||
}
|
||
|
||
private void StartMethod()
|
||
{
|
||
try
|
||
{
|
||
RefreshLogUIThread(DateTime.Now + "正在初始化平台.\r\n");
|
||
//连接服务器
|
||
if (ConnectServer() && ConnectMySql())
|
||
{
|
||
timer3.Interval = 2000;
|
||
timer3.Enabled = true;
|
||
RefreshLogUIThread(DateTime.Now + "初始化平台成功.\r\n");
|
||
DataTable synchronousTable = SqlHelper.ExecuteDataTable("select * from p_synchrTab where disableTag='true' ORDER BY id");
|
||
DataRow[] performDr = null;
|
||
//AFK》LS
|
||
performDr = synchronousTable.Select("directionTag" + "='0'");
|
||
//performDr = synchronousTable.Select("id" + "='14'");
|
||
//this.getAfktoLs(performDr);
|
||
DataTable dt = SqlHelper.ExecuteDataTable("select * from p_synchrTab where disableTag='true' and directionTag='0' ORDER BY id");// and id in(38,46,47)
|
||
this.SynchroDataSingle(dt, DataDirection.AfkToLs);
|
||
|
||
performDr = synchronousTable.Select("id" + "='9999999'");
|
||
if (performDr != null && performDr.Length > 0)
|
||
{
|
||
string afterSql = performDr[0]["afterSql"] + "";//同步完成后执行的sql
|
||
if (!string.IsNullOrWhiteSpace(afterSql)) SqlHelper.ExecuteNonQuery(afterSql);
|
||
}
|
||
DataTable dts = SqlHelper.ExecuteDataTable("select * from p_synchrTab where disableTag='true' and directionTag='1' ORDER BY id");//and id=36
|
||
this.SynchroDataSingle(dts, DataDirection.LsToAfk);
|
||
//LS》AFK
|
||
//performDr = synchronousTable.Select("directionTag" + "='1'");
|
||
//performDr = synchronousTable.Select("id" + "='6'");
|
||
//this.getLStoAFK(performDr);
|
||
//DataTable dt = SqlHelper.ExecuteDataTable("select * from p_synchrTab where disableTag='true' and directionTag='1' ORDER BY id");
|
||
//this.SynchroDataSingle(dt, DataDirection.LsToAfk);
|
||
// 获取中间日志表中报错信息
|
||
getErrorLine();
|
||
rightClickExecute = true;
|
||
timer1.Interval = Convert.ToInt32(intervalTime.Text.ToString()) * 1000;
|
||
timer1.Enabled = true;
|
||
}
|
||
else
|
||
{
|
||
RefreshLogUIThread(DateTime.Now + " 初始化平台失败.\r\n");
|
||
thread = null;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
RefreshLogUIThread(DateTime.Now + string.Format("初始化失败.原因:{0}.\r\n", ex.Message));
|
||
}
|
||
}
|
||
private void startBtn_Click(object sender, EventArgs e)
|
||
{
|
||
if (thread == null)
|
||
{
|
||
thread = new System.Threading.Thread(StartMethod);
|
||
thread.Start();
|
||
}
|
||
else
|
||
{
|
||
RefreshLogUIThread(string.Format("恢复同步,同步中……\r\n"));
|
||
isStop = false;
|
||
}
|
||
}
|
||
private void stopBtn_Click(object sender, EventArgs e)
|
||
{
|
||
isStop = true;
|
||
}
|
||
//从AFK拿数据同步到LS中
|
||
public void getAfktoLs(DataRow[] performDr, bool isRightStop = false)
|
||
{
|
||
//afk》朗速
|
||
RefreshLogUIThread(string.Format("开始从AFK获取数据:\r\n"));
|
||
RefreshLogUIThread(string.Format("开始同步:\r\n"));
|
||
string mainTableName = string.Empty;
|
||
|
||
foreach (DataRow item in performDr)
|
||
{
|
||
try
|
||
{
|
||
if (isStop && !isRightStop)
|
||
{
|
||
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
|
||
StopMethod();
|
||
}
|
||
string targetTabSql = item["targetTabSql"] + "";//去获得的数据源sql
|
||
string synchroSql = (item["synchroSql"] + "").ToLower();//同步sql
|
||
string synLogSql = (item["synLogSql"] + "").ToLower();//同步到备份日志表中的sql
|
||
string afterSql = item["afterSql"] + "";//同步完成后执行的sql
|
||
string targetTab = string.Empty;//中间表对应的表名
|
||
string disableFieid = item["disableField"] + "";//tagid是3或者4,指定字段改变
|
||
|
||
targetTab = targetTabSql.Split('^')[0].Replace(" ", "");
|
||
|
||
mainTableName = synchroSql.Split('^')[0].Replace(" ", "");
|
||
string sql = string.Format(@"if not exists(select * from syscolumns
|
||
where id=object_id('{0}') and name='directTag')
|
||
begin
|
||
alter table {0} add directTag int
|
||
end", mainTableName);
|
||
SqlHelper.ExecuteNonQuery(sql);
|
||
|
||
|
||
//判断有无标识列
|
||
sql = string.Format(@"select CASE when (select count(1)
|
||
FROM information_schema.COLUMNS
|
||
WHERE table_schema = '{0}'
|
||
and table_name = '{1}'
|
||
AND column_name = 'isSynchro') > 0
|
||
then '1'
|
||
else '2'
|
||
end
|
||
", afkDataBase.Text + "", targetTab);
|
||
string jg = MySqlHelper.ExecuteScalar(sql) + "";
|
||
if (jg.Equals("2"))
|
||
{
|
||
//添加标识列
|
||
sql = string.Format("alter table {0} add column isSynchro varchar(30);", targetTab);
|
||
MySqlHelper.ExecuteNonQuery(sql);
|
||
}
|
||
|
||
//获得需要替换的数据
|
||
String replacementValue = synchroSql.Split('^')[2];
|
||
string[] replacementValues = replacementValue.Replace(" ", "").Split(',');
|
||
//获得修改语句中修改表的数据
|
||
String modifyTableColumn = synchroSql.Split('^')[1];
|
||
string[] modifyTableColumns = modifyTableColumn.Replace(" ", "").Split(',');
|
||
|
||
|
||
//判断数据源是否有where条件
|
||
string conditions = string.Empty;
|
||
string isSynchro = string.Empty;
|
||
string[] sArray = targetTabSql.Split('^');
|
||
if (sArray.Length == 1)
|
||
{
|
||
isSynchro = " where isSynchro=1";
|
||
}
|
||
else
|
||
{
|
||
conditions = " where " + sArray[1];
|
||
isSynchro = " where " + sArray[1] + " and isSynchro=1 ";
|
||
}
|
||
//根据获得对应的表,并把其中的列(isSynchro)变为1
|
||
sql = string.Format("update {0} set isSynchro='1' {1}", targetTab, conditions);
|
||
MySqlHelper.ExecuteNonQuery(sql);
|
||
|
||
//根据sql拿到数据源
|
||
sql = string.Format("select * from {0}", targetTabSql.Split('^')[0] + isSynchro);
|
||
DataTable afkDataSource = MySqlHelper.ExecuteDataTable(sql);
|
||
|
||
|
||
//获得拼接的主键对应条件
|
||
string[] synchroSqls = synchroSql.Split('^');
|
||
string modifyConditions = string.Empty;//修改sql条件
|
||
string[] modifyConditionsReplacementValue = null;//条件中要双方对应的属性
|
||
if (synchroSqls.Length == 4)
|
||
{
|
||
modifyConditions = synchroSqls[3];
|
||
modifyConditionsReplacementValue = modifyConditions.Split('=');
|
||
}
|
||
|
||
//获得中间表主键名
|
||
// string MysqlPrimaryKey = MysqlGetPrimaryKey(targetTab);
|
||
|
||
//数据库属性表
|
||
DataTable SQLQueryPropertySheet = SqlHelper.ExecuteDataTable(string.Format("select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE from information_schema.columns where table_name = '{0}'", mainTableName));
|
||
DataTable MYSQLPropertySheet = MySqlHelper.ExecuteDataTable(string.Format("show full columns from {0}", targetTab));
|
||
|
||
|
||
//要执行的sql
|
||
string allSql = string.Empty;//主表保存sql
|
||
string logAllSql = string.Empty;//日志备份表保存sql
|
||
List<string> errorRecordInformation = new List<string>();//报错时需要用到的信息
|
||
//List<string> errorRecordInformationMiddle = new List<string>();//报错时需要用到的信息
|
||
List<string> DatabaseValidationInformation = new List<string>();//数据库验证信息
|
||
|
||
RefreshLogUIThread(string.Format("正在同步: lserp >>>>> {0}\r\n", mainTableName));
|
||
foreach (DataRow afkitem in afkDataSource.Rows)
|
||
{
|
||
if (isStop && !isRightStop)
|
||
{
|
||
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
|
||
StopMethod();
|
||
}
|
||
string backupReplaceField = string.Empty;//新增语句列名
|
||
string newreplacementValue = string.Empty;//新增语句真实值
|
||
string AllBackupReplaceField = string.Empty;//数据源全部列名
|
||
string AllBewreplacementValue = string.Empty;//数据源全部真实值
|
||
string modifyContent = string.Empty;//修改内容
|
||
string newModifyConditions = string.Empty;//主表修改或删除条件
|
||
string newModifyConditionsMiddle = string.Empty;//中间表表修改或删除条件
|
||
string insertSql = "insert into {0}({1}) values({2});";
|
||
string updateSql = "update {0} set {1} {2};";
|
||
|
||
string ModeOfOperation = "0";//操作编号 1新增,2修改,3删除
|
||
|
||
if (modifyConditionsReplacementValue != null && modifyConditionsReplacementValue.Length == 2)
|
||
{
|
||
//当前行主键值
|
||
string key = afkitem[modifyConditionsReplacementValue[1].Replace(" ", "")] + "";
|
||
newModifyConditions = " where " + modifyConditionsReplacementValue[0] + " ='" + key + "'";
|
||
// newModifyConditionsMiddle = " and " + MysqlPrimaryKey + " ='" + afkitem[MysqlPrimaryKey] + "'";
|
||
//执行的操作
|
||
if (afkDataSource.Columns.Contains("tagid"))
|
||
{
|
||
ModeOfOperation = afkitem["tagid"] + "";
|
||
}
|
||
else if (afkDataSource.Columns.Contains("tag_id"))
|
||
{
|
||
ModeOfOperation = afkitem["tag_id"] + "";
|
||
}
|
||
else
|
||
ModeOfOperation = "0";
|
||
//判断LS数据库是否存在这一行
|
||
sql = string.Format("select 1 from {0} {1}", mainTableName, newModifyConditions);
|
||
bool isExistence = "1".Equals(SqlHelper.ExecuteScalar(sql) + "");
|
||
//如果数据库中存在,还是做新增存在的话就不执行
|
||
if (isExistence && (ModeOfOperation.Equals("1") || ModeOfOperation.Equals("0")))
|
||
{
|
||
sql = string.Format("insert into P_RemarkTable(LsTableName,PrimKeyValue,Messages,PrimKey) values ('{0}','{1}','{2}','{3}')", mainTableName, key, "数据库新增已存在相同主键", modifyConditionsReplacementValue[0]);
|
||
SqlHelper.ExecuteNonQuery(sql);
|
||
continue;
|
||
}
|
||
|
||
|
||
}
|
||
|
||
foreach (DataColumn column in afkDataSource.Columns)
|
||
{
|
||
if (isStop && !isRightStop)
|
||
{
|
||
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
|
||
StopMethod();
|
||
}
|
||
if (column.ColumnName.Equals("isSynchro")) continue;
|
||
if (column.ColumnName.Equals("directTag")) continue;
|
||
string value = afkitem[column.ColumnName.Replace(" ", "")] + "";
|
||
value = GetTheRealValue(column, value.Replace("'", "''"));
|
||
|
||
|
||
if (value.Equals("null"))
|
||
{
|
||
AllBewreplacementValue = AllBewreplacementValue + value + ",";
|
||
}
|
||
else
|
||
{
|
||
AllBewreplacementValue = AllBewreplacementValue + "'" + value + "',";
|
||
}
|
||
AllBackupReplaceField = AllBackupReplaceField + column.ColumnName.Replace(" ", "") + ",";
|
||
}
|
||
|
||
int i = 0;
|
||
//重新循环,上面的循环获得的真实值和sql中的字段顺序不同
|
||
foreach (string columnName in replacementValues)
|
||
{
|
||
string name = columnName.Replace(" ", "");
|
||
if (isStop && !isRightStop)
|
||
{
|
||
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
|
||
StopMethod();
|
||
}
|
||
if (name.Contains("#add$_"))
|
||
{
|
||
name = name.Replace("#add$_", "");
|
||
if (ModeOfOperation == "2")
|
||
{
|
||
i++;
|
||
continue;
|
||
}
|
||
}
|
||
DataColumn dc = afkDataSource.Columns[name];
|
||
string value = afkitem[name] + "";
|
||
value = GetTheRealValue(dc, value.Replace("'", "''"));
|
||
if (value.Equals("null"))
|
||
{
|
||
newreplacementValue = newreplacementValue + value + ",";
|
||
modifyContent = modifyContent + modifyTableColumns[i].Replace(" ", "") + "=" + value + ",";
|
||
}
|
||
else
|
||
{
|
||
newreplacementValue = newreplacementValue + "'" + value + "',";
|
||
modifyContent = modifyContent + modifyTableColumns[i].Replace(" ", "") + "='" + value + "',";
|
||
}
|
||
backupReplaceField = backupReplaceField + modifyTableColumns[i].Replace(" ", "") + ",";
|
||
i++;
|
||
}
|
||
|
||
|
||
|
||
if (ModeOfOperation.Replace(" ", "").Equals("2") && !string.IsNullOrEmpty(newModifyConditions))
|
||
{
|
||
updateSql = string.Format(updateSql, mainTableName, modifyContent.TrimEnd(','), newModifyConditions);
|
||
allSql = allSql + "\r\n" + updateSql + " " + separator;
|
||
}
|
||
else if (ModeOfOperation.Replace(" ", "").Equals("3") && !string.IsNullOrEmpty(newModifyConditions))
|
||
{
|
||
string Field = string.Empty;
|
||
if (!string.IsNullOrWhiteSpace(disableFieid))
|
||
{
|
||
Field = disableFieid.Split('^')[0];
|
||
updateSql = string.Format(updateSql, mainTableName, Field, newModifyConditions);
|
||
allSql = allSql + "\r\n" + updateSql + " " + separator;
|
||
}
|
||
}
|
||
else if (ModeOfOperation.Replace(" ", "").Equals("4") && !string.IsNullOrEmpty(newModifyConditions))
|
||
{
|
||
string Field = string.Empty;
|
||
if (!string.IsNullOrWhiteSpace(disableFieid))
|
||
{
|
||
Field = disableFieid.Split('^')[1];
|
||
updateSql = string.Format(updateSql, mainTableName, Field, newModifyConditions);
|
||
allSql = allSql + "\r\n" + updateSql + " " + separator;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//获得要添加的列,并新增同步列(“directTag”)
|
||
string NewreplacementField = synchroSql.Replace("#add$_", "").Split('^')[1];
|
||
insertSql = string.Format(insertSql, mainTableName, NewreplacementField + ",directTag", newreplacementValue + "'1'");
|
||
if (!string.IsNullOrWhiteSpace(newModifyConditions))
|
||
{
|
||
insertSql = insertSql.TrimEnd(';');
|
||
insertSql = string.Format(@"if isnull((select 1 from {0} {1}),0)<>1
|
||
begin
|
||
{2}
|
||
end;
|
||
", mainTableName, newModifyConditions, insertSql);
|
||
}
|
||
allSql = allSql + "\r\n" + insertSql + " " + separator;
|
||
}
|
||
|
||
errorRecordInformation.Add(ModeOfOperation.Replace(" ", "") + "^" + newModifyConditions.Replace("where ", ""));
|
||
|
||
|
||
//判断数据是否符合规范
|
||
DatabaseValidationInformation.Add(IsValueBlank(SQLQueryPropertySheet, MYSQLPropertySheet, afkitem, modifyTableColumn.Replace("#add$_", ""), replacementValue, DataDirection.AfkToLs));
|
||
|
||
|
||
//写入日志备份表
|
||
string backupTableName = string.Empty;//备份表表名
|
||
string dateTime = DateTime.Now.ToString();
|
||
if (string.IsNullOrWhiteSpace(synLogSql)) continue;
|
||
string[] synLog = (item["synLogSql"] + "").Split('^');
|
||
string backupSql = "insert into {0}({1}) values({2});";//备份sql
|
||
backupSql = string.Format(backupSql, synLog[0], AllBackupReplaceField + synLog[1], AllBewreplacementValue + synLog[2].Replace("GETDATE()", "'" + dateTime + "'"));
|
||
logAllSql = logAllSql + "\r\n" + backupSql + " " + separator;
|
||
|
||
}
|
||
try
|
||
{
|
||
|
||
if (!string.IsNullOrWhiteSpace(allSql)) SqlHelper.ExecuteNonQuery(allSql.Replace(separator, ""));
|
||
sql = string.Format("update {0} set directTag='2'where directTag ='1'", mainTableName);
|
||
SqlHelper.ExecuteNonQuery(sql);
|
||
//同步日志
|
||
if (!string.IsNullOrWhiteSpace(logAllSql))
|
||
{
|
||
|
||
MySqlHelper.ExecuteNonQuery(logAllSql.Replace(separator, "").Replace("@TransferLogo", "1").Replace("@ErrorType", "null").Replace("@ErrorMessage", "null"));
|
||
//sql = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "批量增加,表名:" + mainTableName, "GETDATE()", "正常", "", "朗速");
|
||
sql = string.Format("insert into P_RemarkTable(LsTableName,PrimKey) values ('{0}')", targetTab);
|
||
SqlHelper.ExecuteNonQuery(sql);
|
||
}
|
||
//把中间表中同步后的数据删除
|
||
sql = string.Format("delete from {0} where isSynchro='1'", targetTab);
|
||
if (this.deleteCheck.Checked)
|
||
{
|
||
MySqlHelper.ExecuteNonQuery(sql);
|
||
}
|
||
RefreshLogUIThread(string.Format("{0}=========》同步成功:\r\n", mainTableName));
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
string RollBackSql = string.Format("delete {0} where directTag='1'", mainTableName);
|
||
SqlHelper.ExecuteNonQuery(RollBackSql);
|
||
string[] Sqls = allSql.Split(new string[] { separator }, StringSplitOptions.None);
|
||
string[] backupSqls = logAllSql.Split(new string[] { separator }, StringSplitOptions.None);
|
||
string operation = string.Empty;
|
||
string primaryKey = string.Empty;
|
||
//string middlePrimaryKey = string.Empty;
|
||
|
||
|
||
for (int i = 0; i < Sqls.Length - 1; i++)
|
||
{
|
||
try
|
||
{
|
||
operation = string.Empty;
|
||
primaryKey = string.Empty;
|
||
switch (errorRecordInformation[i].Split('^')[0])
|
||
{
|
||
case "0":
|
||
operation = "单条新增";
|
||
break;
|
||
case "1":
|
||
operation = "单条新增";
|
||
break;
|
||
case "2":
|
||
operation = "单条修改";
|
||
break;
|
||
case "3":
|
||
operation = "单条修改";
|
||
break;
|
||
case "4":
|
||
operation = "单条修改";
|
||
break;
|
||
}
|
||
|
||
if (!string.IsNullOrWhiteSpace(errorRecordInformation[i].Split('^')[1]))
|
||
{
|
||
primaryKey = errorRecordInformation[i].Split('^')[1];
|
||
//middlePrimaryKey = errorRecordInformationMiddle[i];
|
||
}
|
||
|
||
if (isStop && !isRightStop)
|
||
{
|
||
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
|
||
StopMethod();
|
||
}
|
||
SqlHelper.ExecuteNonQuery(Sqls[i]);
|
||
if (Sqls.Length == backupSqls.Length) MySqlHelper.ExecuteNonQuery(backupSqls[i].Replace("@TransferLogo", "1").Replace("@ErrorType", "null").Replace("@ErrorMessage", "null"));
|
||
//sql = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", operation + " " + mainTableName + "表,主键" + primaryKey.Replace("'", "''"), "GETDATE()", "正常", "", "朗速");
|
||
//sql = string.Format("insert into P_RemarkTable(LsTableName) values ('{0}')", mainTableName);
|
||
//SqlHelper.ExecuteNonQuery(sql);
|
||
|
||
}
|
||
catch (Exception newEx)
|
||
{
|
||
primaryKey = primaryKey.Replace("'", "''");
|
||
string errorMessage = string.IsNullOrWhiteSpace(DatabaseValidationInformation[i]) ? newEx.Message.Replace("'", "''") : DatabaseValidationInformation[i];
|
||
sql = string.Format("insert into P_RemarkTable(LsTableName,PrimKeyValue,Messages,PrimKey) values ('{0}','{1}','{2}','{3}')", targetTab, primaryKey.Split('=')[1].Replace("'", ""), "朗速获取AFK数据错误:" + errorMessage + "", primaryKey.Split('=')[0]);
|
||
SqlHelper.ExecuteNonQuery(sql);
|
||
if (Sqls.Length == backupSqls.Length) MySqlHelper.ExecuteNonQuery(backupSqls[i].Replace("@TransferLogo", "2").Replace("@ErrorType", "1").Replace("@ErrorMessage", "'朗速获取AFK数据错误:" + errorMessage + ""));
|
||
}
|
||
|
||
}
|
||
sql = string.Format("update {0} set directTag='2'", mainTableName);
|
||
SqlHelper.ExecuteNonQuery(sql);
|
||
//把中间表中剩下同步失败的数据同步标识改变
|
||
sql = string.Format("delete from {0} where isSynchro='1'", targetTab);
|
||
if (this.deleteCheck.Checked)
|
||
{
|
||
MySqlHelper.ExecuteNonQuery(sql);
|
||
}
|
||
RefreshLogUIThread(string.Format("{0}{1}=========》同步部分失败:\r\n", mainTableName, ex.Message));
|
||
|
||
|
||
|
||
}
|
||
//执行同步完成后的sql
|
||
if (!string.IsNullOrWhiteSpace(afterSql)) SqlHelper.ExecuteNonQuery(afterSql);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
|
||
string sql = string.Format("insert into P_RemarkTable(LsTableName,Messages) values ('{0}','{1}')", mainTableName, "朗速获取AFK数据错误:" + ex.Message.Replace("'", "''") + "");
|
||
SqlHelper.ExecuteNonQuery(sql);
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// 把中间数据库日志表中报错信息存入朗速数据库
|
||
/// </summary>
|
||
public void getErrorLine()
|
||
{
|
||
try
|
||
{
|
||
DataTable RemarkdockTable = SqlHelper.ExecuteDataTable("select * from Remarkdock");
|
||
|
||
foreach (DataRow RemarkdockDr in RemarkdockTable.Rows)
|
||
{
|
||
string LsTableName = RemarkdockDr["LsTableName"] + "";//朗速表名
|
||
string ZhTableName = RemarkdockDr["ZhTableName"] + "";//Afk表名
|
||
string SucceedId = RemarkdockDr["SucceedId"] + "";//成功标识 1成功 2失败
|
||
string SucceedRemark = RemarkdockDr["SucceedRemark"] + "";//错误信息
|
||
string PrimKeyId = RemarkdockDr["PrimKeyId"] + "";//afk主键名
|
||
string LsPrimKeyId = RemarkdockDr["LsPrimKeyId"] + "";//朗速主键名
|
||
|
||
//判断有无标识列
|
||
string sql = string.Format(@"select CASE when (select count(1)
|
||
FROM information_schema.COLUMNS
|
||
WHERE table_schema = '{0}'
|
||
and table_name = '{1}'
|
||
AND column_name = 'Ls_succeed_ID') > 0
|
||
then '1'
|
||
else '2'
|
||
end
|
||
", afkDataBase.Text + "", ZhTableName);
|
||
string jg = MySqlHelper.ExecuteScalar(sql) + "";
|
||
if (jg.Equals("2"))
|
||
{
|
||
//添加标识列
|
||
sql = string.Format("alter table {0} add column Ls_succeed_ID varchar(30);", ZhTableName);
|
||
MySqlHelper.ExecuteNonQuery(sql);
|
||
}
|
||
sql = string.Format("update {0} set Ls_succeed_ID='2' where ifnull(Ls_succeed_ID,'0')!='1' ", ZhTableName);
|
||
MySqlHelper.ExecuteNonQuery(sql);
|
||
|
||
//根据中航的中间日志表名获取没有同步的错误日志信息
|
||
string querySql = string.Format("SELECT {0},{1} from {2} where {3}=2 and Ls_succeed_ID='2' ", PrimKeyId, SucceedRemark, ZhTableName, SucceedId);
|
||
DataTable queryTable = MySqlHelper.ExecuteDataTable(querySql);
|
||
|
||
//把获取的错误信息存入朗速数据库表中
|
||
string preservationSql = string.Empty;
|
||
foreach (DataRow queryDr in queryTable.Rows)
|
||
{
|
||
preservationSql = string.Format("insert into P_RemarkTable(LsTableName,PrimKeyValue,Messages,PrimKey) values ('{0}','{1}','{2}','{3}')", LsTableName, queryDr[PrimKeyId], (queryDr[SucceedRemark] + "").Replace("'", "''"), LsPrimKeyId);
|
||
SqlHelper.ExecuteNonQuery(preservationSql);
|
||
}
|
||
|
||
sql = string.Format("update {0} set Ls_succeed_ID='1' where Ls_succeed_ID='2' ", ZhTableName);
|
||
MySqlHelper.ExecuteNonQuery(sql);
|
||
}
|
||
}
|
||
catch (Exception)
|
||
{
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据传入的列和值,转成数据库可以获取的值
|
||
/// </summary>
|
||
/// <param name="column"></param>
|
||
/// <param name="Value"></param>
|
||
/// <returns></returns>
|
||
public string GetTheRealValue(DataColumn column, string Value)
|
||
{
|
||
//如果数据源类型是bool,就替换成0(false)或1(true)
|
||
if (column.DataType == typeof(Boolean))
|
||
{
|
||
if (Value.Equals("true", StringComparison.OrdinalIgnoreCase))
|
||
{
|
||
Value = "1";
|
||
}
|
||
else
|
||
{
|
||
Value = "0";
|
||
}
|
||
}
|
||
if (column.DataType == typeof(int))
|
||
{
|
||
if (Value.Equals(""))
|
||
{
|
||
Value = "0";
|
||
}
|
||
}
|
||
if (Value.Equals(""))
|
||
{
|
||
Value = "null";
|
||
}
|
||
return Value;
|
||
}
|
||
//从LS拿数据同步到AFK中
|
||
public void getLStoAFK(DataRow[] performDr, bool isRightStop = false)
|
||
{
|
||
|
||
RefreshLogUIThread(string.Format("开始从LS传输数据:\r\n"));
|
||
RefreshLogUIThread(string.Format("开始传输:\r\n"));
|
||
|
||
string targetTab = string.Empty;//获取数据源sql对应的表名(ls数据库表名)
|
||
foreach (DataRow item in performDr)
|
||
{
|
||
try
|
||
{
|
||
if (isStop && !isRightStop)
|
||
{
|
||
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
|
||
StopMethod();
|
||
}
|
||
string directTagValue = (item["tabname"] + "").Contains("&") ? "8" : "2";//数据源传输成功后更改的directTag的值
|
||
string targetTabSql = item["targetTabSql"] + "";//去获得的数据sql
|
||
string synchroSql = (item["synchroSql"] + "").ToLower();//同步sql
|
||
string synLogSql = (item["synLogSql"] + "").ToLower();//同步到备份日志表中的sql
|
||
string afterSql = item["afterSql"] + "";//同步完成后执行的sql
|
||
|
||
|
||
targetTab = targetTabSql.Split('^')[0].Replace(" ", "");
|
||
|
||
//判断LS数据中有无标识列
|
||
string sql = string.Format(@"if not exists(select * from syscolumns
|
||
where id=object_id('{0}') and name='directTag')
|
||
begin
|
||
alter table {0} add directTag int not null default 0
|
||
end
|
||
", targetTab);
|
||
SqlHelper.ExecuteNonQuery(sql);
|
||
|
||
//中间表表名
|
||
string mainTableName = (item["synchroSql"] + "").Split('^')[0].Replace(" ", "");
|
||
|
||
sql = string.Format(@"select CASE when (select count(1)
|
||
FROM information_schema.COLUMNS
|
||
WHERE table_schema = '{0}'
|
||
and table_name = '{1}'
|
||
AND column_name = 'directTag') > 0
|
||
then '1'
|
||
else '2'
|
||
end
|
||
", afkDataBase.Text + "", mainTableName);
|
||
string jg = MySqlHelper.ExecuteScalar(sql) + "";
|
||
if (jg.Equals("2"))
|
||
{
|
||
//中间表添加标识列
|
||
sql = string.Format("alter table {0} add column directTag int;", mainTableName);
|
||
MySqlHelper.ExecuteNonQuery(sql);
|
||
}
|
||
|
||
//获得需要替换的数据
|
||
String replacementValue = synchroSql.Split('^')[2];
|
||
string[] replacementValues = replacementValue.Replace(" ", "").Split(',');
|
||
List<string> replacementValuesList = new List<string>(replacementValues);
|
||
|
||
|
||
//判断数据源是否有where条件
|
||
string conditions = string.Empty;
|
||
string[] sArray = targetTabSql.Split('^');
|
||
if (sArray.Length != 1)
|
||
{
|
||
conditions = " where " + sArray[1];
|
||
}
|
||
|
||
//获得拼接的主键对应条件
|
||
string[] synchroSqls = synchroSql.Split('^');
|
||
string modifyConditions = string.Empty;//修改sql条件
|
||
string[] modifyConditionsReplacementValue = null;//条件中要双方对应的属性
|
||
if (synchroSqls.Length == 4)
|
||
{
|
||
modifyConditions = synchroSqls[3];
|
||
modifyConditionsReplacementValue = modifyConditions.Split('=');
|
||
}
|
||
|
||
//是否有对应关联的主表
|
||
string relevanceSql = (item["relevanceSql"] + "").ToLower();
|
||
string associativeTableName = string.Empty;//相关联的主表
|
||
string[] associatedConditions = null;//关联条件
|
||
if (!string.IsNullOrWhiteSpace(relevanceSql))
|
||
{
|
||
associativeTableName = relevanceSql.Split('^')[0];
|
||
//第一个为主表字段,第二个为当前表字段
|
||
associatedConditions = relevanceSql.Split('^')[1].Split('=');
|
||
}
|
||
|
||
|
||
//数据库属性表
|
||
DataTable SQLQueryPropertySheet = SqlHelper.ExecuteDataTable(string.Format("select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE from information_schema.columns where table_name = '{0}'", targetTab));
|
||
DataTable MYSQLPropertySheet = MySqlHelper.ExecuteDataTable(string.Format("show full columns from {0}", mainTableName));
|
||
|
||
|
||
|
||
//根据sql拿到数据源
|
||
sql = string.Format("select * from {0} {1}", sArray[0], conditions);
|
||
DataTable LsDataSource = SqlHelper.ExecuteDataTable(sql);
|
||
//要执行的sql
|
||
string allSql = string.Empty;//主表保存sql
|
||
string logAllSql = string.Empty;//日志备份表保存sql
|
||
List<string> errorRecordInformation = new List<string>();//报错时需要用到的信息
|
||
string updateAllSql = string.Empty;//保存后修改数据源tagid的全部sql
|
||
string modifyTheKey = string.Empty;//修改内容(tagid或tag_id)
|
||
string associativeTableSql = string.Empty;//关联表在当前表成功后执行的sql
|
||
List<string> DatabaseValidationInformation = new List<string>();//数据库验证信息
|
||
|
||
RefreshLogUIThread(string.Format("正在传输: lserp >>>>> {0}\r\n", targetTab));
|
||
|
||
foreach (DataRow afkitem in LsDataSource.Rows)
|
||
{
|
||
if (isStop && !isRightStop)
|
||
{
|
||
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
|
||
StopMethod();
|
||
}
|
||
string backupReplaceField = string.Empty;
|
||
string newreplacementValue = string.Empty;
|
||
string insertSql = "insert into {0}({1}) values({2});";
|
||
string newModifyConditions = string.Empty;//对应的主键值
|
||
|
||
string dataSourcePrimaryKey = string.Empty;//数据源主键
|
||
string updateTagidSql = "update {0} set {1} {2};";//修改数据源tagid属性sql
|
||
|
||
|
||
if (LsDataSource.Columns.Contains("tagid"))
|
||
{
|
||
|
||
modifyTheKey = "tagid='5'";
|
||
}
|
||
else if (LsDataSource.Columns.Contains("tag_id"))
|
||
{
|
||
|
||
modifyTheKey = "tag_id='5'";
|
||
}
|
||
|
||
|
||
|
||
//是否有对应的主表
|
||
if (associatedConditions != null && associatedConditions.Length == 2 && !string.IsNullOrWhiteSpace(associativeTableName))
|
||
{
|
||
sql = string.Format("select directTag from {0} where {1}='{2}'", associativeTableName, associatedConditions[0], afkitem[associatedConditions[1]] + "");
|
||
if (!(SqlHelper.ExecuteScalar(sql) + "").Equals("8")) continue;
|
||
string updateDirectTagsql = string.Format("update {0} set directTag='2' where {1}='{2}'", associativeTableName, associatedConditions[0], afkitem[associatedConditions[1]] + "");
|
||
associativeTableSql = associativeTableSql + "\r\n" + updateDirectTagsql + " " + separator;
|
||
}
|
||
|
||
|
||
foreach (DataColumn column in LsDataSource.Columns)
|
||
{
|
||
if (isStop && !isRightStop)
|
||
{
|
||
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
|
||
StopMethod();
|
||
}
|
||
string value = afkitem[column.ColumnName.Replace(" ", "")] + "";
|
||
value = GetTheRealValue(column, value.Replace("'", "''"));
|
||
if (modifyConditionsReplacementValue != null && modifyConditionsReplacementValue.Length == 2)
|
||
{
|
||
if (column.ColumnName.Equals(modifyConditionsReplacementValue[1], StringComparison.OrdinalIgnoreCase))
|
||
{
|
||
newModifyConditions = " where " + modifyConditionsReplacementValue[0] + " ='" + value + "'";
|
||
dataSourcePrimaryKey = " where " + column.ColumnName + " ='" + value + "'";
|
||
}
|
||
}
|
||
int order = Array.IndexOf(replacementValues, column.ColumnName.ToLower());
|
||
//保存sql需要用到的真实值
|
||
if (order != -1)
|
||
{
|
||
if (value.Equals("null"))
|
||
{
|
||
replacementValuesList[order] = value;
|
||
|
||
}
|
||
else
|
||
{
|
||
replacementValuesList[order] = "'" + value + "'";
|
||
}
|
||
}
|
||
}
|
||
newreplacementValue = string.Join(",", replacementValuesList.ToArray());
|
||
|
||
//获得要添加的列,并新增同步列(“directTag”)
|
||
string NewreplacementField = synchroSql.Split('^')[1];
|
||
string dateTime = DateTime.Now.ToString();
|
||
|
||
newreplacementValue = Regex.Replace(newreplacementValue, @"getdate\(\)", "now()", RegexOptions.IgnoreCase);
|
||
insertSql = string.Format(insertSql, mainTableName, NewreplacementField + ",directTag", newreplacementValue + ",'1'");
|
||
allSql = allSql + "\r\n" + insertSql + " " + separator; ;
|
||
|
||
updateTagidSql = string.Format(updateTagidSql, targetTab, modifyTheKey, dataSourcePrimaryKey);
|
||
updateAllSql = updateAllSql + "\r\n" + updateTagidSql + " " + separator;
|
||
|
||
errorRecordInformation.Add(newModifyConditions.Replace("where ", ""));
|
||
|
||
//判断数据是否符合规范
|
||
DatabaseValidationInformation.Add(IsValueBlank(SQLQueryPropertySheet, MYSQLPropertySheet, afkitem, replacementValue, NewreplacementField, DataDirection.LsToAfk));
|
||
|
||
|
||
//备份sql
|
||
//if (string.IsNullOrWhiteSpace(synLogSql)) continue;
|
||
//string backupTableName = string.Empty;//备份表表名
|
||
//string[] synLog = (item["synLogSql"] + "").Split('^');
|
||
//string backupSql = "insert into {0}({1}) values({2});";//备份sql
|
||
//backupSql = string.Format(backupSql, synLog[0], NewreplacementField + "," + synLog[1], newreplacementValue + "," + synLog[2].Replace("GETDATE()", "'" + dateTime + "'"));//Regex.Replace( synLog[2], dateTime, "GETDATE()", RegexOptions.IgnoreCase)
|
||
//logAllSql = logAllSql + "\r\n" + backupSql + " " + separator; ;
|
||
}
|
||
|
||
try
|
||
{
|
||
if (!string.IsNullOrWhiteSpace(allSql))
|
||
{
|
||
MySqlHelper.ExecuteNonQuery(allSql.Replace(separator, ""));
|
||
sql = string.Format("update {0} set directTag='2' where directTag='1'", mainTableName);
|
||
MySqlHelper.ExecuteNonQuery(sql);
|
||
}
|
||
//同步日志
|
||
//if (!string.IsNullOrWhiteSpace(logAllSql))
|
||
//{
|
||
// MySqlHelper.ExecuteNonQuery(logAllSql.Replace(separator, "").Replace("@ErrorType", "null").Replace("@ErrorMessage", "null"));
|
||
// sql = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "批量增加,表名:" + mainTableName, "GETDATE()", "正常", "", "AFK");
|
||
// SqlHelper.ExecuteNonQuery(sql);
|
||
//}
|
||
if (!string.IsNullOrWhiteSpace(updateAllSql))
|
||
{
|
||
//SqlHelper.ExecuteNonQuery(updateAllSql.Replace(separator, ""));
|
||
}
|
||
|
||
if (!string.IsNullOrWhiteSpace(associativeTableSql))
|
||
{
|
||
SqlHelper.ExecuteNonQuery(associativeTableSql.Replace(separator, ""));
|
||
}
|
||
sql = string.Format("update {0} set directTag='{2}' {1}", targetTab, conditions, directTagValue);
|
||
SqlHelper.ExecuteNonQuery(sql);
|
||
RefreshLogUIThread(string.Format("{0}=========》传输成功:\r\n", targetTab));
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
if (!string.IsNullOrWhiteSpace(associativeTableSql))
|
||
{
|
||
//不管报错先把主表中的directTag改了,单条执行时报错时在改回来
|
||
SqlHelper.ExecuteNonQuery(associativeTableSql.Replace(separator, ""));
|
||
}
|
||
sql = string.Format("delete from {0} where directTag='1'", mainTableName);
|
||
MySqlHelper.ExecuteNonQuery(sql);
|
||
//string[] logAllSqls = logAllSql.Split(new string[] { separator }, StringSplitOptions.None);
|
||
string[] allSqls = allSql.Split(new string[] { separator }, StringSplitOptions.None);
|
||
// string[] updatesqls = updateAllSql.Split(new string[] { separator }, StringSplitOptions.None);
|
||
string[] associativeTableSqls = associativeTableSql.Split(new string[] { separator }, StringSplitOptions.None);
|
||
string primaryKey = string.Empty;//主键值
|
||
string RollBackSql = string.Empty;
|
||
|
||
for (int i = 0; i < allSqls.Length - 1; i++)
|
||
{
|
||
|
||
try
|
||
{
|
||
if (isStop && !isRightStop)
|
||
{
|
||
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
|
||
StopMethod();
|
||
}
|
||
if (!string.IsNullOrWhiteSpace(errorRecordInformation[i]))//
|
||
{
|
||
primaryKey = errorRecordInformation[i];
|
||
if (!string.IsNullOrWhiteSpace(conditions))
|
||
{
|
||
RollBackSql = string.Format("update {0} set directTag='{2}' {1} and {3}", targetTab, conditions, directTagValue, primaryKey.Replace(modifyConditionsReplacementValue[0], modifyConditionsReplacementValue[1]));
|
||
SqlHelper.ExecuteNonQuery(RollBackSql);
|
||
}
|
||
else
|
||
{
|
||
RollBackSql = string.Format("update {0} set directTag='{2}' {1} where {3}", targetTab, conditions, directTagValue, primaryKey.Replace(modifyConditionsReplacementValue[0], modifyConditionsReplacementValue[1]));
|
||
SqlHelper.ExecuteNonQuery(RollBackSql);
|
||
}
|
||
}
|
||
MySqlHelper.ExecuteNonQuery(allSqls[i]);
|
||
//if (logAllSqls.Length > i) MySqlHelper.ExecuteNonQuery(logAllSqls[i].Replace("@ErrorType", "null").Replace("@ErrorMessage", "null"));
|
||
//SqlHelper.ExecuteNonQuery(updatesqls[i].Replace(separator, ""));
|
||
//sql = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条增加" + mainTableName + "表,主键" + primaryKey.Replace("'", "''"), "GETDATE()", "正常", "", "AFK");
|
||
//SqlHelper.ExecuteNonQuery(sql);
|
||
}
|
||
catch (Exception newEx)
|
||
{
|
||
string errorMessage = string.IsNullOrWhiteSpace(DatabaseValidationInformation[i]) ? newEx.Message.Replace("'", "''") : DatabaseValidationInformation[i];
|
||
sql = string.Format("insert into P_RemarkTable(LsTableName,PrimKeyValue,Messages,PrimKey) values ('{0}','{1}','{2}','{3}')", mainTableName, primaryKey.Split('=')[1].Replace("'", ""), "AFK获取朗速数据错误:" + errorMessage + "", primaryKey.Split('=')[0]);
|
||
|
||
SqlHelper.ExecuteNonQuery(sql);
|
||
if (!string.IsNullOrWhiteSpace(primaryKey))//
|
||
{
|
||
if (!string.IsNullOrWhiteSpace(conditions))
|
||
{
|
||
RollBackSql = string.Format("update {0} set directTag='3' {1} and {2}", targetTab, conditions, primaryKey.Replace(modifyConditionsReplacementValue[0], modifyConditionsReplacementValue[1]));
|
||
SqlHelper.ExecuteNonQuery(RollBackSql);
|
||
}
|
||
else
|
||
{
|
||
RollBackSql = string.Format("update {0} set directTag='3' {1} where {2}", targetTab, conditions, primaryKey.Replace(modifyConditionsReplacementValue[0], modifyConditionsReplacementValue[1]));
|
||
SqlHelper.ExecuteNonQuery(RollBackSql);
|
||
}
|
||
}
|
||
|
||
|
||
//有对应主表,并且当前明细表的行sql报错,回滚主表directTag值
|
||
if (associativeTableSqls.Length > i && !string.IsNullOrWhiteSpace(associativeTableSqls[i]))
|
||
{
|
||
string[] newAssociatedConditions = associativeTableSqls[i].Split(new string[] { "where" }, StringSplitOptions.None);
|
||
sql = string.Format("update {0} set directTag='8' where {1}", associativeTableName, newAssociatedConditions[1]);
|
||
SqlHelper.ExecuteNonQuery(sql);
|
||
}
|
||
//SqlHelper.ExecuteNonQuery(updatesqls[i].Replace(separator, "").Replace("5", "3"));
|
||
}
|
||
|
||
}
|
||
if (string.IsNullOrWhiteSpace(modifyConditions))
|
||
{
|
||
RollBackSql = string.Format("update {0} set directTag='2' {1} ", targetTab, conditions);
|
||
SqlHelper.ExecuteNonQuery(RollBackSql);
|
||
}
|
||
|
||
RefreshLogUIThread(string.Format("{0}{1}=========》部分传输失败:\r\n", targetTab, ex.Message));
|
||
|
||
//修改中间主表中的同步中内容
|
||
RollBackSql = string.Format("update {0} set directTag='2' where directTag='1'", mainTableName);
|
||
MySqlHelper.ExecuteNonQuery(RollBackSql);
|
||
}
|
||
//执行同步完成后的sql
|
||
if (!string.IsNullOrWhiteSpace(afterSql)) SqlHelper.ExecuteNonQuery(afterSql);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
string sql = string.Format("insert into P_RemarkTable(LsTableName,Messages) values ('{0}','{1}')", targetTab, "AFK获取朗速数据错误:" + ex.Message.Replace("'", "''") + "");
|
||
SqlHelper.ExecuteNonQuery(sql);
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
#region 测试汇总单条执行方法
|
||
|
||
|
||
/// <summary>
|
||
/// 数据传递方向
|
||
/// </summary>
|
||
public enum DataDirection : int
|
||
{
|
||
LsToAfk = 1,
|
||
AfkToLs = 0
|
||
}
|
||
|
||
#region 同步数据单条执行
|
||
public void SynchroDataSingle(DataTable synchronousTable, DataDirection dataDirection, bool isRightStop = false)
|
||
{
|
||
string selectCond = string.Format("directionTag='{0}'", ((int)dataDirection));
|
||
DataRow[] performDr = synchronousTable.Select(selectCond);//需要执行的数据条数
|
||
RefreshLogUIThread(string.Format("开始从{0}获取数据:\r\n", dataDirection == 0 ? "中航爱福客" : "朗速"));
|
||
RefreshLogUIThread(string.Format("开始同步:\r\n"));
|
||
|
||
foreach (DataRow item in performDr)//循环需要同步的表
|
||
{
|
||
if (isStop && !isRightStop)
|
||
{
|
||
RefreshLogUIThread(string.Format("暂停同步……\r\n"));
|
||
StopMethod();
|
||
}
|
||
string[] targetStrs = (item["targetTabSql"] + "").ToLower().Split('^');//数据源字段解析
|
||
string[] synchroStrs = (item["synchroSql"] + "").ToLower().Split('^');//同步字段解析
|
||
string[] synLogStrs = (item["synLogSql"] + "").ToLower().Split('^');//同步日志表字段解析
|
||
string[] primaryKeys = null;
|
||
if (synchroStrs.Length == 4)
|
||
{
|
||
primaryKeys = synchroStrs[3].Replace(" ", "").Split('=');
|
||
}
|
||
#region 中航方相关信息
|
||
string afkTabName = dataDirection == 0 ? targetStrs[0].Replace(" ", "") : synchroStrs[0].Replace(" ", "");//表名
|
||
string afkTargeFields = dataDirection == 0 ? synchroStrs[2].Replace(" ", "") : synchroStrs[1].Replace(" ", "");//字段名
|
||
string afkPrimaryKey = dataDirection == 0 ? (primaryKeys != null && primaryKeys.Length == 2 ? primaryKeys[1] : "") : (primaryKeys != null && primaryKeys.Length == 2 ? primaryKeys[0] : "");
|
||
#endregion
|
||
#region 朗速方相关信息
|
||
string lsTabName = dataDirection == 0 ? synchroStrs[0].Replace(" ", "") : targetStrs[0].Replace(" ", "");
|
||
string lsTargeFields = dataDirection == 0 ? synchroStrs[1].Replace(" ", "") : synchroStrs[2].Replace(" ", "");
|
||
string lsPrimaryKey = dataDirection == 0 ? (primaryKeys != null && primaryKeys.Length == 2 ? primaryKeys[0] : "") : (primaryKeys != null && primaryKeys.Length == 2 ? primaryKeys[1] : "");
|
||
#endregion
|
||
#region 日志表相关信息
|
||
string logTabName = synLogStrs.Length == 3 ? synLogStrs[0].Replace(" ", "") : "";
|
||
string[] logFields = synLogStrs.Length == 3 ? synLogStrs[1].Replace(" ", "").Split(',') : null;
|
||
string[] logAsFields = synLogStrs.Length == 3 ? synLogStrs[2].Replace(" ", "").Split(',') : null;
|
||
string logSucceeId = "";
|
||
string logErrorType = "";
|
||
string logErrorMessage = "";
|
||
#endregion
|
||
#region 其他信息
|
||
string afterSql = (item["afterSql"] + "").ToLower();//同步完成后执行的sql
|
||
string disableFieids = (item["disableField"] + "").ToLower();//tagid是3或者4,指定字段改变
|
||
//数据库属性表
|
||
DataTable SQLQueryPropertySheet = SqlHelper.ExecuteDataTable(string.Format("select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE from information_schema.columns where table_name = '{0}'", lsTabName));
|
||
DataTable MYSQLPropertySheet = MySqlHelper.ExecuteDataTable(string.Format("show full columns from {0}", afkTabName));
|
||
#endregion
|
||
int ErrorNumber = 0;
|
||
try
|
||
{
|
||
string lsExistTagStr = string.Format(@"if not exists(select * from syscolumns
|
||
where id=object_id('{0}') and name='directTag')
|
||
begin
|
||
alter table {0} add directTag int
|
||
end", lsTabName);
|
||
SqlHelper.ExecuteNonQuery(lsExistTagStr);//判断朗速方是否存在同步完成字段
|
||
string afkExistTagStr = string.Format(@"select CASE when (select count(1)
|
||
FROM information_schema.COLUMNS
|
||
WHERE table_schema = '{0}'
|
||
and table_name = '{1}'
|
||
AND column_name = 'isSynchro') > 0
|
||
then '1'
|
||
else '2'
|
||
end
|
||
", afkDataBase.Text + "", afkTabName);
|
||
string afkExistResult = MySqlHelper.ExecuteScalar(afkExistTagStr) + "";//判断中航方有无标识列
|
||
if (afkExistResult.Equals("2"))
|
||
{
|
||
string afkAddTagStr = string.Format("alter table {0} add column isSynchro varchar(30);", afkTabName); //如果不存在则添加标识列
|
||
MySqlHelper.ExecuteNonQuery(afkAddTagStr);
|
||
}
|
||
//判断数据源是否有where条件,
|
||
string sourceWhereCond = string.Empty;//获取数据源where条件
|
||
if (targetStrs.Length == 1)
|
||
sourceWhereCond = dataDirection == 0 ? "where isSynchro=1" : " where directTag<>2";//数据源是afk则默认条件字段没有意义,数据源是ls则需获取默认条件字段不为2的数据
|
||
else
|
||
sourceWhereCond = string.Format(" where {0}", dataDirection == 0 ? targetStrs[1] + " and isSynchro=1 " : targetStrs[1]);
|
||
#region 获取数据源
|
||
//如果是ls获取数据,要先把数据源中当前的全部数据的isSynchro变为1
|
||
if (dataDirection == 0)
|
||
{
|
||
string conditions = string.Empty;
|
||
conditions = targetStrs.Length == 2 ? " where " + targetStrs[1] : "";
|
||
string sql = string.Format("update {0} set isSynchro='1' {1}", afkTabName, conditions);
|
||
MySqlHelper.ExecuteNonQuery(sql);
|
||
}
|
||
string sourceTabNale = dataDirection == 0 ? afkTabName : lsTabName;//数据源表名
|
||
string getSourceTabName = dataDirection == 0 ? lsTabName : afkTabName;//接受数据表表名
|
||
string sourceSelectFields = dataDirection == 0 ? afkTargeFields : lsTargeFields;//数据源字段
|
||
if (sourceSelectFields.Contains("getdate()"))//处理各种特殊字段
|
||
sourceSelectFields = sourceSelectFields.Replace("getdate()", dataDirection == 0 ? "now() as as_senddate" : "getdate() as as_senddate");
|
||
if (sourceSelectFields.Contains("#add$_"))
|
||
sourceSelectFields = sourceSelectFields.Replace("#add$_", "");
|
||
string selectSourceSql = string.Format("select {0} from {1}{2}", sourceSelectFields, sourceTabNale, sourceWhereCond);//查询数据源sql
|
||
DataTable sourceTab = dataDirection == 0 ? MySqlHelper.ExecuteDataTable(selectSourceSql) : SqlHelper.ExecuteDataTable(selectSourceSql);//获取数据源
|
||
#endregion
|
||
RefreshLogUIThread(string.Format("正在同步: {0} {2} >>>>> {1} {3}\r\n", dataDirection == 0 ? "中航爱福客" : "朗速", dataDirection == 0 ? "朗速" : "中航爱福客", dataDirection == 0 ? afkTabName : lsTabName, dataDirection == 0 ? lsTabName : afkTabName));
|
||
string modeOfOperation = sourceTab.Columns.Contains("tagid") ? "tagid" : sourceTab.Columns.Contains("tag_id") ? "tag_id" : "";//获取执方式的字段
|
||
string dataTransferSql = "";//执行数据传递sql
|
||
string dataTransferLogSql = "";//接收数据需要向中间表写日志
|
||
string lsErrorLogSqlStr = "";//朗速日志表
|
||
ErrorNumber = 0;
|
||
if (!string.IsNullOrEmpty(modeOfOperation))
|
||
{
|
||
IEnumerable<IGrouping<string, DataRow>> resultGroup = sourceTab.Rows.Cast<DataRow>().GroupBy<DataRow, string>(dr => dr[modeOfOperation] + "");//C# 对DataTable中的某列分组,result中的Key是分组后的值
|
||
foreach (IGrouping<string, DataRow> afkTagGroup in resultGroup)//按tagid分组
|
||
{
|
||
switch (afkTagGroup.Key)
|
||
{
|
||
case "1"://传递新增
|
||
#region 新增
|
||
foreach (DataRow sourceRow in afkTagGroup)
|
||
{
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";
|
||
lsErrorLogSqlStr = "";
|
||
bool pushLog = false;
|
||
string getSourcePrimaryKey = dataDirection == 0 ? lsPrimaryKey : afkPrimaryKey;
|
||
string sourcePrimaryKey = dataDirection == 0 ? afkPrimaryKey : lsPrimaryKey;
|
||
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
|
||
string insertKeysStr = "";//insert语句keys
|
||
string insertValuesStr = "";//insert语句values
|
||
//判断是否有不能为空的数据
|
||
string SaveErrorMessage = IsValueBlank(SQLQueryPropertySheet, MYSQLPropertySheet, sourceRow, lsTargeFields, afkTargeFields, dataDirection);
|
||
if (!string.IsNullOrWhiteSpace(SaveErrorMessage))
|
||
{
|
||
logSucceeId = "2";
|
||
logErrorType = "1";
|
||
logErrorMessage = SaveErrorMessage;
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
|
||
continue;
|
||
}
|
||
try
|
||
{
|
||
string getSourceKeys = dataDirection == 0 ? lsTargeFields : afkTargeFields;//接收数据表字段
|
||
GetInsertSqlStr(sourceRow, getSourceKeys, afkTargeFields, getSourceTabName, out insertKeysStr, out insertValuesStr, out dataTransferSql, dataDirection);
|
||
if (dataDirection == 0 && IsExistPrimaryValue(sourceRow, getSourceTabName, getSourcePrimaryKey, sourcePrimaryKey, dataDirection))//朗速获取数据前应判断主键是否存在,执行前
|
||
{
|
||
logSucceeId = "2";
|
||
logErrorType = "1";
|
||
logErrorMessage = string.Format("主键值{0}已存在", primaryValue);
|
||
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条增加" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", string.Format("主键值{0}已存在", primaryValue), dataDirection == 0 ? "朗速" : "中航爱福客");
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
|
||
continue;
|
||
}
|
||
int result = dataDirection == 0 ? SqlHelper.ExecuteNonQuery(dataTransferSql) : MySqlHelper.ExecuteNonQuery(dataTransferSql);
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue) values ('{0}','{1}','{2}')", afkTabName, afkPrimaryKey, primaryValue);
|
||
if (dataDirection == DataDirection.AfkToLs)//接收数据时aftersql判断
|
||
{
|
||
if (!string.IsNullOrWhiteSpace(afterSql))
|
||
{
|
||
DataTable afterTab = SqlHelper.ExecuteDataTable(ReplaceRowValue(afterSql, sourceRow));//执行成功失败
|
||
string execsql = "";
|
||
string type = "";
|
||
if (afterTab != null && afterTab.Rows.Count > 0)
|
||
{
|
||
DataRow afterRow = afterTab.Rows[0];
|
||
execsql = afterRow.Table.Columns.Contains("execsql") ? afterRow["execsql"] + "" : "";
|
||
type = afterRow.Table.Columns.Contains("type") ? afterRow["type"] + "" : "";
|
||
}
|
||
string afterReturnMsg = execsql;
|
||
if (afterReturnMsg.Equals("Exec_BillOutPush", StringComparison.CurrentCultureIgnoreCase))
|
||
{
|
||
afterReturnMsg = BillOutPush(sourceRow, type);
|
||
if (!string.IsNullOrWhiteSpace(afterSql) && string.IsNullOrEmpty(afterReturnMsg))//返回为空则成功
|
||
{
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";
|
||
}
|
||
else if (!string.IsNullOrWhiteSpace(afterSql) && !string.IsNullOrEmpty(afterReturnMsg))
|
||
{
|
||
if (afterReturnMsg.Equals("99999"))
|
||
{
|
||
logSucceeId = "2";
|
||
logErrorType = "1";
|
||
logErrorMessage = "未检测到明细表数据";
|
||
updateIssychro(sourceTabNale, sourcePrimaryKey, sourceRow);
|
||
pushLog = true;
|
||
continue;
|
||
}
|
||
logErrorMessage = afterReturnMsg;
|
||
logSucceeId = "2";
|
||
logErrorType = "1";
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条增加" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "正常", "", dataDirection == 0 ? "朗速" : "中航爱福客");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ErrorNumber++;
|
||
logSucceeId = "2";
|
||
logErrorType = "1";
|
||
logErrorMessage = ex.Message.Replace("'", "''");
|
||
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条增加" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", ex.Message, dataDirection == 0 ? "朗速" : "中航爱福客");
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
|
||
}
|
||
finally
|
||
{
|
||
//LS》AFK要处理双方数据的directTag问题
|
||
if (dataDirection == DataDirection.LsToAfk)
|
||
{
|
||
//把传输的数据directTag改为2
|
||
string sql = string.Format("update {0} set directTag='2' where {1}='{2}'", afkTabName, afkPrimaryKey, sourceRow[lsPrimaryKey.Trim()]);
|
||
MySqlHelper.ExecuteNonQuery(sql);
|
||
//把ls数据库中已经传输的数据directTag改为2
|
||
sql = string.Format("update {0} set directTag='2' where {1}='{2}'", lsTabName, lsPrimaryKey, sourceRow[lsPrimaryKey.Trim()]);
|
||
SqlHelper.ExecuteNonQuery(sql);//插入朗速日志表
|
||
}
|
||
#region 处理中间表写入日志
|
||
if (synLogStrs.Length == 3)
|
||
{
|
||
try
|
||
{
|
||
string[] logArgs = new string[] { logSucceeId, logErrorType, logErrorMessage };
|
||
GetLogSqlStr(logFields, logAsFields, logArgs, insertKeysStr, insertValuesStr, logTabName, out dataTransferLogSql);
|
||
if (!pushLog)
|
||
{
|
||
int logResult = dataDirection == 0 ? MySqlHelper.ExecuteNonQuery(dataTransferLogSql) : 0;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ErrorNumber++;
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, ex.Message.Replace("'", "''"));
|
||
}
|
||
}
|
||
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr);//插入朗速日志表
|
||
#endregion
|
||
}
|
||
}
|
||
#endregion
|
||
break;
|
||
case "2"://传递修改
|
||
#region 修改
|
||
if (dataDirection == 0)
|
||
{
|
||
#region 修改朗速为修改语句
|
||
foreach (DataRow sourceRow in afkTagGroup)
|
||
{
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";
|
||
lsErrorLogSqlStr = "";
|
||
string getSourcePrimaryKey = dataDirection == 0 ? lsPrimaryKey : afkPrimaryKey;
|
||
string sourcePrimaryKey = dataDirection == 0 ? afkPrimaryKey : lsPrimaryKey;
|
||
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
|
||
string insertLogKeysStr = "";//insert日志语句keys
|
||
string insertLogValuesStr = "";//insert日志语句values
|
||
try
|
||
{
|
||
dataTransferSql = "update {0} set {1} where {2}";
|
||
string getSourceKeys = dataDirection == 0 ? lsTargeFields : afkTargeFields;//接收数据表字段
|
||
GetUpdateSqlStr(sourceRow, getSourceKeys, afkTargeFields, getSourceTabName, getSourcePrimaryKey, sourcePrimaryKey, out insertLogKeysStr, out insertLogValuesStr, out dataTransferSql);
|
||
int result = SqlHelper.ExecuteNonQuery(dataTransferSql);
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";//执行成功
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue) values ('{0}','{1}','{2}')", afkTabName, afkPrimaryKey, primaryValue);
|
||
if (dataDirection == DataDirection.AfkToLs)//接收数据时aftersql判断
|
||
{
|
||
if (!string.IsNullOrWhiteSpace(afterSql))
|
||
{
|
||
DataTable afterTab = SqlHelper.ExecuteDataTable(ReplaceRowValue(afterSql, sourceRow));//执行成功失败
|
||
string execsql = "";
|
||
string type = "";
|
||
if (afterTab != null && afterTab.Rows.Count > 0)
|
||
{
|
||
DataRow afterRow = afterTab.Rows[0];
|
||
execsql = afterRow.Table.Columns.Contains("execsql") ? afterRow["execsql"] + "" : "";
|
||
type = afterRow.Table.Columns.Contains("type") ? afterRow["type"] + "" : "";
|
||
}
|
||
string afterReturnMsg = execsql;
|
||
if (afterReturnMsg.Equals("Exec_BillOutPush", StringComparison.CurrentCultureIgnoreCase))
|
||
{
|
||
afterReturnMsg = BillOutPush(sourceRow, type);
|
||
if (!string.IsNullOrWhiteSpace(afterSql) && string.IsNullOrEmpty(afterReturnMsg))//返回为空则成功
|
||
{
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";
|
||
}
|
||
else if (!string.IsNullOrWhiteSpace(afterSql) && !string.IsNullOrEmpty(afterReturnMsg))
|
||
{
|
||
logErrorMessage = afterReturnMsg;
|
||
logSucceeId = "2";
|
||
logErrorType = "1";
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "正常", "", dataDirection == 0 ? "朗速" : "中航爱福客");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ErrorNumber++;
|
||
logSucceeId = "2";
|
||
logErrorType = "1";
|
||
logErrorMessage = ex.Message.Replace("'", "''");
|
||
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", ex.Message, dataDirection == 0 ? "朗速" : "中航爱福客");
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
|
||
}
|
||
finally
|
||
{
|
||
#region 处理中间表写入日志
|
||
if (synLogStrs.Length == 3 && dataDirection == 0)
|
||
{
|
||
try
|
||
{
|
||
string[] logArgs = new string[] { logSucceeId, logErrorType, logErrorMessage };
|
||
GetLogSqlStr(logFields, logAsFields, logArgs, insertLogKeysStr, insertLogValuesStr, logTabName, out dataTransferLogSql);
|
||
int logResult = MySqlHelper.ExecuteNonQuery(dataTransferLogSql);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ErrorNumber++;
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, ex.Message.Replace("'", "''"));
|
||
}
|
||
}
|
||
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr);
|
||
#endregion
|
||
}
|
||
}
|
||
#endregion
|
||
}
|
||
else
|
||
{
|
||
#region 修改爱福客为新增语句
|
||
foreach (DataRow sourceRow in afkTagGroup)
|
||
{
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";
|
||
lsErrorLogSqlStr = "";
|
||
string getSourcePrimaryKey = dataDirection == 0 ? lsPrimaryKey : afkPrimaryKey;
|
||
string sourcePrimaryKey = dataDirection == 0 ? afkPrimaryKey : lsPrimaryKey;
|
||
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
|
||
string insertKeysStr = "";//insert语句keys
|
||
string insertValuesStr = "";//insert语句values
|
||
try
|
||
{
|
||
string getSourceKeys = dataDirection == 0 ? lsTargeFields : afkTargeFields;//接收数据表字段
|
||
GetInsertSqlStr(sourceRow, getSourceKeys, afkTargeFields, getSourceTabName, out insertKeysStr, out insertValuesStr, out dataTransferSql, dataDirection);
|
||
int result = MySqlHelper.ExecuteNonQuery(dataTransferSql);
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";//执行成功
|
||
// lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "正常", "", dataDirection == 0 ? "朗速" : "中航爱福客");
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue) values ('{0}','{1}','{2}')", afkTabName, afkPrimaryKey, primaryValue);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ErrorNumber++;
|
||
logSucceeId = "2";
|
||
logErrorType = "1";
|
||
logErrorMessage = ex.Message.Replace("'", "''");
|
||
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", ex.Message, dataDirection == 0 ? "朗速" : "中航爱福客");
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
|
||
|
||
}
|
||
finally
|
||
{
|
||
//LS》AFK要处理双方数据的directTag问题
|
||
//把传输的数据directTag改为2
|
||
string sql = string.Format("update {0} set directTag='2' where {1}='{2}'", afkTabName, afkPrimaryKey, sourceRow[lsPrimaryKey.Trim()]);
|
||
MySqlHelper.ExecuteNonQuery(sql);
|
||
//把ls数据库中已经传输的数据directTag改为2
|
||
sql = string.Format("update {0} set directTag='2' where {1}='{2}'", lsTabName, lsPrimaryKey, sourceRow[lsPrimaryKey.Trim()]);
|
||
SqlHelper.ExecuteNonQuery(sql);//插入朗速日志表
|
||
|
||
#region 处理中间表写入日志,向爱福客插入数据不需向中间表添加日志
|
||
//string[] logArgs = new string[] { logSucceeId, logErrorType, logErrorMessage };
|
||
//GetLogSqlStr(logFields, logAsFields, logArgs, insertKeysStr, insertValuesStr, logTabName, out dataTransferLogSql);
|
||
//int logResult = dataDirection == 0 ? MySqlHelper.ExecuteNonQuery(dataTransferLogSql) : 0;
|
||
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr); //插入朗速日志表
|
||
#endregion
|
||
}
|
||
}
|
||
#endregion
|
||
}
|
||
#endregion
|
||
break;
|
||
case "3"://更改状态,禁用,上下架等
|
||
#region 更改状态,禁用,上下架等
|
||
if (dataDirection == 0)
|
||
{
|
||
#region 修改朗速为修改语句
|
||
foreach (DataRow sourceRow in afkTagGroup)
|
||
{
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";
|
||
lsErrorLogSqlStr = "";
|
||
string getSourcePrimaryKey = dataDirection == 0 ? lsPrimaryKey : afkPrimaryKey;
|
||
string sourcePrimaryKey = dataDirection == 0 ? afkPrimaryKey : lsPrimaryKey;
|
||
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
|
||
string insertLogKeysStr = "";//insert日志语句keys
|
||
string insertLogValuesStr = "";//insert日志语句values
|
||
string[] disableFieidsArgs = disableFieids.Replace(" ", "").Split('^');
|
||
string stateField = disableFieidsArgs[0];//3对应第一个状态
|
||
try
|
||
{
|
||
dataTransferSql = "update {0} set {1} where {2}";
|
||
string getSourceKeys = dataDirection == 0 ? lsTargeFields : afkTargeFields;//接收数据表字段
|
||
GetChangeStateSqlStr(sourceRow, stateField, getSourceKeys, afkTargeFields, getSourceTabName, getSourcePrimaryKey, sourcePrimaryKey, out insertLogKeysStr, out insertLogValuesStr, out dataTransferSql);
|
||
int result = SqlHelper.ExecuteNonQuery(dataTransferSql);
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";//执行成功
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue) values ('{0}','{1}','{2}')", afkTabName, afkPrimaryKey, primaryValue);
|
||
if (dataDirection == DataDirection.AfkToLs)//接收数据时aftersql判断
|
||
{
|
||
if (!string.IsNullOrWhiteSpace(afterSql))
|
||
{
|
||
DataTable afterTab = SqlHelper.ExecuteDataTable(ReplaceRowValue(afterSql, sourceRow));//执行成功失败
|
||
string execsql = "";
|
||
string type = "";
|
||
if (afterTab != null && afterTab.Rows.Count > 0)
|
||
{
|
||
DataRow afterRow = afterTab.Rows[0];
|
||
execsql = afterRow.Table.Columns.Contains("execsql") ? afterRow["execsql"] + "" : "";
|
||
type = afterRow.Table.Columns.Contains("type") ? afterRow["type"] + "" : "";
|
||
}
|
||
string afterReturnMsg = execsql;
|
||
if (afterReturnMsg.Equals("Exec_BillOutPush", StringComparison.CurrentCultureIgnoreCase))
|
||
{
|
||
afterReturnMsg = BillOutPush(sourceRow, type);
|
||
if (!string.IsNullOrWhiteSpace(afterSql) && string.IsNullOrEmpty(afterReturnMsg))//返回为空则成功
|
||
{
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";
|
||
}
|
||
else if (!string.IsNullOrWhiteSpace(afterSql) && !string.IsNullOrEmpty(afterReturnMsg))
|
||
{
|
||
logErrorMessage = afterReturnMsg;
|
||
logSucceeId = "2";
|
||
logErrorType = "1";
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
|
||
}
|
||
}
|
||
}
|
||
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "正常", "", dataDirection == 0 ? "朗速" : "中航爱福客");
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ErrorNumber++;
|
||
logSucceeId = "2";
|
||
logErrorType = "1";
|
||
logErrorMessage = ex.Message.Replace("'", "''");
|
||
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", ex.Message, dataDirection == 0 ? "朗速" : "中航爱福客");
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
|
||
|
||
}
|
||
finally
|
||
{
|
||
#region 处理中间表写入日志
|
||
if (synLogStrs.Length == 3)
|
||
{
|
||
try
|
||
{
|
||
string[] logArgs = new string[] { logSucceeId, logErrorType, logErrorMessage };
|
||
GetLogSqlStr(logFields, logAsFields, logArgs, insertLogKeysStr, insertLogValuesStr, logTabName, out dataTransferLogSql);
|
||
#endregion
|
||
int logResult = MySqlHelper.ExecuteNonQuery(dataTransferLogSql);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ErrorNumber++;
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, ex.Message.Replace("'", "''"));
|
||
}
|
||
}
|
||
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr);
|
||
}
|
||
}
|
||
#endregion
|
||
}
|
||
else
|
||
{
|
||
#region 修改爱福客为新增语句
|
||
foreach (DataRow sourceRow in afkTagGroup)
|
||
{
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";
|
||
lsErrorLogSqlStr = "";
|
||
string getSourcePrimaryKey = dataDirection == 0 ? lsPrimaryKey : afkPrimaryKey;
|
||
string sourcePrimaryKey = dataDirection == 0 ? afkPrimaryKey : lsPrimaryKey;
|
||
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
|
||
string insertKeysStr = "";//insert语句keys
|
||
string insertValuesStr = "";//insert语句values
|
||
try
|
||
{
|
||
string getSourceKeys = dataDirection == 0 ? lsTargeFields : afkTargeFields;//接收数据表字段
|
||
GetInsertSqlStr(sourceRow, getSourceKeys, afkTargeFields, getSourceTabName, out insertKeysStr, out insertValuesStr, out dataTransferSql, dataDirection);
|
||
int result = MySqlHelper.ExecuteNonQuery(dataTransferSql);
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";//执行成功
|
||
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "正常", "", dataDirection == 0 ? "朗速" : "中航爱福客");
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue) values ('{0}','{1}','{2}')", afkTabName, afkPrimaryKey, primaryValue);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ErrorNumber++;
|
||
logSucceeId = "2";
|
||
logErrorType = "1";
|
||
logErrorMessage = ex.Message.Replace("'", "''");
|
||
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", ex.Message, dataDirection == 0 ? "朗速" : "中航爱福客");
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
|
||
|
||
}
|
||
finally
|
||
{
|
||
//LS》AFK要处理双方数据的directTag问题
|
||
//把传输的数据directTag改为2
|
||
string sql = string.Format("update {0} set directTag='2' where {1}='{2}'", afkTabName, afkPrimaryKey, sourceRow[lsPrimaryKey.Trim()]);
|
||
MySqlHelper.ExecuteNonQuery(sql);
|
||
//把ls数据库中已经传输的数据directTag改为2
|
||
sql = string.Format("update {0} set directTag='2' where {1}='{2}'", lsTabName, lsPrimaryKey, sourceRow[lsPrimaryKey.Trim()]);
|
||
SqlHelper.ExecuteNonQuery(sql);//插入朗速日志表
|
||
|
||
#region 处理中间表写入日志,向爱福客插入数据不需向中间表添加日志
|
||
//string[] logArgs = new string[] { logSucceeId, logErrorType, logErrorMessage };
|
||
//GetLogSqlStr(logFields, logAsFields, logArgs, insertKeysStr, insertValuesStr, logTabName, out dataTransferLogSql);
|
||
//int logResult = dataDirection == 0 ? MySqlHelper.ExecuteNonQuery(dataTransferLogSql) : 0;
|
||
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr); //插入朗速日志表
|
||
#endregion
|
||
}
|
||
}
|
||
#endregion
|
||
}
|
||
#endregion
|
||
break;
|
||
case "4":
|
||
#region 更改状态,禁用,上下架等
|
||
if (dataDirection == 0)
|
||
{
|
||
#region 修改朗速为修改语句
|
||
foreach (DataRow sourceRow in afkTagGroup)
|
||
{
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";
|
||
lsErrorLogSqlStr = "";
|
||
string getSourcePrimaryKey = dataDirection == 0 ? lsPrimaryKey : afkPrimaryKey;
|
||
string sourcePrimaryKey = dataDirection == 0 ? afkPrimaryKey : lsPrimaryKey;
|
||
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
|
||
string insertLogKeysStr = "";//insert日志语句keys
|
||
string insertLogValuesStr = "";//insert日志语句values
|
||
string[] disableFieidsArgs = disableFieids.Replace(" ", "").Split('^');
|
||
string stateField = disableFieidsArgs[1];//4对应第二个状态
|
||
try
|
||
{
|
||
dataTransferSql = "update {0} set {1} where {2}";
|
||
string getSourceKeys = dataDirection == 0 ? lsTargeFields : afkTargeFields;//接收数据表字段
|
||
GetChangeStateSqlStr(sourceRow, stateField, getSourceKeys, afkTargeFields, getSourceTabName, getSourcePrimaryKey, sourcePrimaryKey, out insertLogKeysStr, out insertLogValuesStr, out dataTransferSql);
|
||
int result = SqlHelper.ExecuteNonQuery(dataTransferSql);
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";//执行成功
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue) values ('{0}','{1}','{2}')", afkTabName, afkPrimaryKey, primaryValue);
|
||
if (dataDirection == DataDirection.AfkToLs)//接收数据时aftersql判断
|
||
{
|
||
if (!string.IsNullOrWhiteSpace(afterSql))
|
||
{
|
||
DataTable afterTab = SqlHelper.ExecuteDataTable(ReplaceRowValue(afterSql, sourceRow));//执行成功失败
|
||
string execsql = "";
|
||
string type = "";
|
||
if (afterTab != null && afterTab.Rows.Count > 0)
|
||
{
|
||
DataRow afterRow = afterTab.Rows[0];
|
||
execsql = afterRow.Table.Columns.Contains("execsql") ? afterRow["execsql"] + "" : "";
|
||
type = afterRow.Table.Columns.Contains("type") ? afterRow["type"] + "" : "";
|
||
}
|
||
string afterReturnMsg = execsql;
|
||
if (afterReturnMsg.Equals("Exec_BillOutPush", StringComparison.CurrentCultureIgnoreCase))
|
||
{
|
||
afterReturnMsg = BillOutPush(sourceRow, type);
|
||
if (!string.IsNullOrWhiteSpace(afterSql) && string.IsNullOrEmpty(afterReturnMsg))//返回为空则成功
|
||
{
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";
|
||
}
|
||
else if (!string.IsNullOrWhiteSpace(afterSql) && !string.IsNullOrEmpty(afterReturnMsg))
|
||
{
|
||
logErrorMessage = afterReturnMsg;
|
||
logSucceeId = "2";
|
||
logErrorType = "1";
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
|
||
}
|
||
}
|
||
}
|
||
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "正常", "", dataDirection == 0 ? "朗速" : "中航爱福客");
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ErrorNumber++;
|
||
logSucceeId = "2";
|
||
logErrorType = "1";
|
||
logErrorMessage = ex.Message.Replace("'", "''");
|
||
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", ex.Message, dataDirection == 0 ? "朗速" : "中航爱福客");
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
|
||
}
|
||
finally
|
||
{
|
||
#region 处理中间表写入日志
|
||
if (synLogStrs.Length == 3)
|
||
{
|
||
try
|
||
{
|
||
string[] logArgs = new string[] { logSucceeId, logErrorType, logErrorMessage };
|
||
GetLogSqlStr(logFields, logAsFields, logArgs, insertLogKeysStr, insertLogValuesStr, logTabName, out dataTransferLogSql);
|
||
#endregion
|
||
int logResult = MySqlHelper.ExecuteNonQuery(dataTransferLogSql);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ErrorNumber++;
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, ex.Message.Replace("'", "''"));
|
||
}
|
||
}
|
||
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr);
|
||
}
|
||
}
|
||
#endregion
|
||
}
|
||
else
|
||
{
|
||
#region 修改爱福客为新增语句
|
||
foreach (DataRow sourceRow in afkTagGroup)
|
||
{
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";
|
||
lsErrorLogSqlStr = "";
|
||
string getSourcePrimaryKey = dataDirection == 0 ? lsPrimaryKey : afkPrimaryKey;
|
||
string sourcePrimaryKey = dataDirection == 0 ? afkPrimaryKey : lsPrimaryKey;
|
||
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
|
||
string insertKeysStr = "";//insert语句keys
|
||
string insertValuesStr = "";//insert语句values
|
||
try
|
||
{
|
||
string getSourceKeys = dataDirection == 0 ? lsTargeFields : afkTargeFields;//接收数据表字段
|
||
GetInsertSqlStr(sourceRow, getSourceKeys, afkTargeFields, getSourceTabName, out insertKeysStr, out insertValuesStr, out dataTransferSql, dataDirection);
|
||
int result = MySqlHelper.ExecuteNonQuery(dataTransferSql);
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";//执行成功
|
||
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "正常", "", dataDirection == 0 ? "朗速" : "中航爱福客");
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue) values ('{0}','{1}','{2}')", afkTabName, afkPrimaryKey, primaryValue);
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ErrorNumber++;
|
||
logSucceeId = "2";
|
||
logErrorType = "1";
|
||
logErrorMessage = ex.Message.Replace("'", "''");
|
||
// lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条修改" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", ex.Message, dataDirection == 0 ? "朗速" : "中航爱福客");
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
|
||
|
||
}
|
||
finally
|
||
{
|
||
//LS》AFK要处理双方数据的directTag问题
|
||
//把传输的数据directTag改为2
|
||
string sql = string.Format("update {0} set directTag='2' where {1}='{2}'", afkTabName, afkPrimaryKey, sourceRow[lsPrimaryKey.Trim()]);
|
||
MySqlHelper.ExecuteNonQuery(sql);
|
||
//把ls数据库中已经传输的数据directTag改为2
|
||
sql = string.Format("update {0} set directTag='2' where {1}='{2}'", lsTabName, lsPrimaryKey, sourceRow[lsPrimaryKey.Trim()]);
|
||
SqlHelper.ExecuteNonQuery(sql);//插入朗速日志表
|
||
|
||
#region 处理中间表写入日志,向爱福客插入数据不需向中间表添加日志
|
||
//string[] logArgs = new string[] { logSucceeId, logErrorType, logErrorMessage };
|
||
//GetLogSqlStr(logFields, logAsFields, logArgs, insertKeysStr, insertValuesStr, logTabName, out dataTransferLogSql);
|
||
//int logResult = dataDirection == 0 ? MySqlHelper.ExecuteNonQuery(dataTransferLogSql) : 0;
|
||
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr); //插入朗速日志表
|
||
#endregion
|
||
}
|
||
}
|
||
#endregion
|
||
}
|
||
#endregion
|
||
break;
|
||
case ""://没有可执行的操作
|
||
#region 没有可执行的操作
|
||
foreach (DataRow sourceRow in afkTagGroup)
|
||
{
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";
|
||
lsErrorLogSqlStr = "";
|
||
string getSourcePrimaryKey = dataDirection == 0 ? lsPrimaryKey : afkPrimaryKey;
|
||
string sourcePrimaryKey = dataDirection == 0 ? afkPrimaryKey : lsPrimaryKey;
|
||
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
|
||
string insertKeysStr = "";//insert语句keys
|
||
string insertValuesStr = "";//insert语句values
|
||
try
|
||
{
|
||
string getSourceKeys = dataDirection == 0 ? lsTargeFields : afkTargeFields;//接收数据表字段
|
||
GetInsertSqlStr(sourceRow, getSourceKeys, afkTargeFields, getSourceTabName, out insertKeysStr, out insertValuesStr, out dataTransferSql, dataDirection);
|
||
logSucceeId = "2";
|
||
logErrorType = "1";
|
||
logErrorMessage = string.Format("{0}为空,没有可执行的操作", modeOfOperation);
|
||
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条增加" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", string.Format("{0}为空,没有可执行的操作", modeOfOperation), dataDirection == 0 ? "朗速" : "中航爱福客");
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ErrorNumber++;
|
||
logSucceeId = "2";
|
||
logErrorType = "1";
|
||
logErrorMessage = ex.Message.Replace("'", "''");
|
||
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条增加" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", ex.Message, dataDirection == 0 ? "朗速" : "中航爱福客");
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
|
||
}
|
||
finally
|
||
{
|
||
#region 处理中间表写入日志
|
||
if (synLogStrs.Length == 3)
|
||
{
|
||
try
|
||
{
|
||
string[] logArgs = new string[] { logSucceeId, logErrorType, logErrorMessage };
|
||
GetLogSqlStr(logFields, logAsFields, logArgs, insertKeysStr, insertValuesStr, logTabName, out dataTransferLogSql);
|
||
int logResult = dataDirection == 0 ? MySqlHelper.ExecuteNonQuery(dataTransferLogSql) : 0;
|
||
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr);//插入朗速日志表
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ErrorNumber++;
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, ex.Message.Replace("'", "''"));
|
||
}
|
||
}
|
||
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr);
|
||
#endregion
|
||
}
|
||
}
|
||
#endregion
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
#region 没有标识字段默认新增
|
||
foreach (DataRow sourceRow in sourceTab.Rows)
|
||
{
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";
|
||
lsErrorLogSqlStr = "";
|
||
string getSourcePrimaryKey = dataDirection == 0 ? lsPrimaryKey : afkPrimaryKey;
|
||
string sourcePrimaryKey = dataDirection == 0 ? afkPrimaryKey : lsPrimaryKey;
|
||
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
|
||
string insertKeysStr = "";//insert语句keys
|
||
string insertValuesStr = "";//insert语句values
|
||
try
|
||
{
|
||
string getSourceKeys = dataDirection == 0 ? lsTargeFields : afkTargeFields;//接收数据表字段
|
||
GetInsertSqlStr(sourceRow, getSourceKeys, afkTargeFields, getSourceTabName, out insertKeysStr, out insertValuesStr, out dataTransferSql, dataDirection);
|
||
int result = dataDirection == 0 ? SqlHelper.ExecuteNonQuery(dataTransferSql) : MySqlHelper.ExecuteNonQuery(dataTransferSql);
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";//执行成功
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue) values ('{0}','{1}','{2}')", afkTabName, afkPrimaryKey, primaryValue);
|
||
if (dataDirection == DataDirection.AfkToLs)//接收数据时aftersql判断
|
||
{
|
||
if (!string.IsNullOrWhiteSpace(afterSql))
|
||
{
|
||
DataTable afterTab = SqlHelper.ExecuteDataTable(ReplaceRowValue(afterSql, sourceRow));//执行成功失败
|
||
string execsql = "";
|
||
string type = "";
|
||
if (afterTab != null && afterTab.Rows.Count > 0)
|
||
{
|
||
DataRow afterRow = afterTab.Rows[0];
|
||
execsql = afterRow.Table.Columns.Contains("execsql") ? afterRow["execsql"] + "" : "";
|
||
type = afterRow.Table.Columns.Contains("type") ? afterRow["type"] + "" : "";
|
||
}
|
||
string afterReturnMsg = execsql;
|
||
if (afterReturnMsg.Equals("Exec_BillOutPush", StringComparison.CurrentCultureIgnoreCase))
|
||
{
|
||
afterReturnMsg = BillOutPush(sourceRow, type);
|
||
if (!string.IsNullOrWhiteSpace(afterSql) && string.IsNullOrEmpty(afterReturnMsg))//返回为空则成功
|
||
{
|
||
logSucceeId = "1";
|
||
logErrorType = "0";
|
||
logErrorMessage = "";
|
||
}
|
||
else if (!string.IsNullOrWhiteSpace(afterSql) && !string.IsNullOrEmpty(afterReturnMsg))
|
||
{
|
||
logErrorMessage = afterReturnMsg;
|
||
logSucceeId = "2";
|
||
logErrorType = "1";
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
|
||
}
|
||
}
|
||
}
|
||
// lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条增加" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "正常", "", dataDirection == 0 ? "朗速" : "中航爱福客");
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ErrorNumber++;
|
||
logSucceeId = "2";
|
||
logErrorType = "1";
|
||
logErrorMessage = ex.Message.Replace("'", "''");
|
||
//lsErrorLogSqlStr = string.Format("Insert into ls_errlogtab(Ls_log_tagid,Ls_log_opdt,Ls_log_rulst,Ls_log_buginfo,Ls_log_coname)values('{0}',{1},'{2}','{3}','{4}')", "单条增加" + getSourceTabName + "表,主键" + getSourcePrimaryKey.Replace("'", "''"), "GETDATE()", "异常", ex.Message, dataDirection == 0 ? "朗速" : "中航爱福客");
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, logErrorMessage);
|
||
}
|
||
finally
|
||
{
|
||
#region 处理中间表写入日志
|
||
if (synLogStrs.Length == 3)
|
||
{
|
||
try
|
||
{
|
||
string[] logArgs = new string[] { logSucceeId, logErrorType, logErrorMessage };
|
||
GetLogSqlStr(logFields, logAsFields, logArgs, insertKeysStr, insertValuesStr, logTabName, out dataTransferLogSql);
|
||
int logResult = dataDirection == 0 ? MySqlHelper.ExecuteNonQuery(dataTransferLogSql) : 0;
|
||
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr);//插入朗速日志表
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
ErrorNumber++;
|
||
lsErrorLogSqlStr = string.Format("insert into P_RemarkTable(LsTableName,PrimKey,PrimKeyValue,Messages) values ('{0}','{1}','{2}','{3}')", afkTabName, afkPrimaryKey, primaryValue, ex.Message.Replace("'", "''"));
|
||
}
|
||
SqlHelper.ExecuteNonQuery(lsErrorLogSqlStr);
|
||
}
|
||
#endregion
|
||
}
|
||
}
|
||
#endregion
|
||
}
|
||
//删除
|
||
if (dataDirection == 0)
|
||
{
|
||
string deleteSql = string.Format("delete from {0} where isSynchro='1'", afkTabName);
|
||
if (this.deleteCheck.Checked)
|
||
{
|
||
MySqlHelper.ExecuteNonQuery(deleteSql);
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
string direction = dataDirection == 0 ? "朗速获取AFK数据错误" : "AFK获取朗速数据错误";
|
||
string sql = string.Format("insert into P_RemarkTable(LsTableName,Messages) values ('{0}','{1}')", lsTabName, direction + ":" + ex.Message.Replace("'", "''") + "");
|
||
SqlHelper.ExecuteNonQuery(sql);
|
||
}
|
||
finally
|
||
{
|
||
RefreshLogUIThread("同步完成,失败条数:" + ErrorNumber + "\r\n");
|
||
}
|
||
}
|
||
}
|
||
#endregion
|
||
#region MyRegion
|
||
private void updateIssychro(string dataName, string primary, DataRow sourceRow)
|
||
{
|
||
string primaryValue = !string.IsNullOrEmpty(primary) ? sourceRow[primary] + "" : "";
|
||
string sql = "update {0} set issynchro ='0' where {1}='{2}'";
|
||
sql = string.Format(sql, dataName, primary, primaryValue);
|
||
MySqlHelper.ExecuteNonQuery(sql);
|
||
}
|
||
#endregion
|
||
#region 反写固定存储过程些入出库单
|
||
/// <summary>
|
||
/// 反写固定存储过程些入出库单
|
||
/// </summary>
|
||
/// <param name="name">数据行中name字段</param>
|
||
/// <param name="logisticsid">数据行中logisticsid字段</param>
|
||
/// <returns></returns>
|
||
public static string BillOutPush(DataRow sourceRow, string type)
|
||
{
|
||
string name = sourceRow.Table.Columns.Contains("name") ? sourceRow["name"] + "" : "";
|
||
string logisticsid = sourceRow.Table.Columns.Contains("logisticsid") ? sourceRow["logisticsid"] + "" : "";
|
||
string operatorName = "管理员", operatorId = "1";
|
||
if (!string.IsNullOrEmpty(name))
|
||
{
|
||
|
||
string sql = string.Format("select employeeid,employeename from p_employeetab where employeename = '{0}'", name);
|
||
DataTable DataOperTable = SqlHelperOther.ExecuteDataTable(sql);
|
||
if (DataOperTable.Rows.Count > 0)
|
||
{
|
||
operatorId = DataOperTable.Rows[0]["employeeid"] + "";
|
||
operatorName = DataOperTable.Rows[0]["employeename"] + "";
|
||
}
|
||
}
|
||
SqlParameter msg = new SqlParameter("@msg", SqlDbType.VarChar, 3000);
|
||
msg.Direction = ParameterDirection.Output;
|
||
List<SqlParameter> list = new List<SqlParameter>
|
||
{
|
||
new SqlParameter("@nbgys",SqlDbType.VarChar,10),
|
||
new SqlParameter("@type",SqlDbType.Int,4),
|
||
new SqlParameter("@keyvalue",SqlDbType.VarChar,200),
|
||
new SqlParameter("@operatorId",SqlDbType.Int,4),
|
||
new SqlParameter("@operatorName",SqlDbType.VarChar,20),
|
||
msg,
|
||
};
|
||
|
||
SqlParameter[] param = list.ToArray();
|
||
param[0].Value = "e25d5dd2b4b74dd99f79227d8db5b4c7";
|
||
param[1].Value = type;
|
||
param[2].Value = logisticsid;
|
||
param[3].Value = operatorId;
|
||
param[4].Value = operatorName;
|
||
param[5].Value = "";
|
||
try
|
||
{
|
||
SqlHelper.ExecuteDataSet(CommandType.StoredProcedure, "wms_createbillpr", "billpr", param);
|
||
}
|
||
catch (Exception)
|
||
{
|
||
return msg.Value + "";
|
||
}
|
||
return msg.Value + "";
|
||
}
|
||
#endregion
|
||
#region 判断主键值是否已经存在
|
||
private bool IsExistPrimaryValue(DataRow sourceRow, string getSourceTabName, string getSourcePrimaryKey, string sourcePrimaryKey, DataDirection dataDirection)
|
||
{
|
||
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
|
||
if (!string.IsNullOrEmpty(primaryValue))
|
||
{
|
||
string isExistSql = string.Format("select * from {0} where {1}='{2}'", getSourceTabName, getSourcePrimaryKey, primaryValue);
|
||
DataTable resultTab = new DataTable();
|
||
if (dataDirection == 0)
|
||
resultTab = SqlHelper.ExecuteDataTable(isExistSql);
|
||
else
|
||
resultTab = MySqlHelper.ExecuteDataTable(isExistSql);
|
||
if (resultTab.Rows.Count > 0)
|
||
return true;
|
||
else
|
||
return false;
|
||
}
|
||
else
|
||
return false;
|
||
}
|
||
#endregion
|
||
#region 判断值是否可以为空
|
||
//sql表格属性表 mysql表格属性表 行数据 ls数据库中的列 afk列 方向
|
||
private string IsValueBlank(DataTable SQLQueryPropertySheet, DataTable MYSQLPropertySheet, DataRow sourceRow, string LsColumnName, string AfkColumnName, DataDirection dataDirection)
|
||
{
|
||
string key = string.Empty;
|
||
string Value = string.Empty;
|
||
string SaveErrorMessage = string.Empty;//提示信息
|
||
|
||
//判断存入的值是否为空
|
||
string[] LsColumnNames = LsColumnName.Split(',');
|
||
string[] AfkColumnNames = AfkColumnName.Split(',');
|
||
|
||
for (int i = 0; i < AfkColumnNames.Length - 1; i++)
|
||
{
|
||
//获取数据源中当前列名
|
||
key = (dataDirection == 0) ? (AfkColumnNames[i] + "").Trim() : (LsColumnNames[i] + "").Trim();
|
||
if (key.Contains("getdate()")) continue;
|
||
|
||
//获取AFK列名或注释
|
||
DataRow[] ListOfAttributes = MYSQLPropertySheet.Select("Field='" + (AfkColumnNames[i] + "").Trim() + "'");
|
||
string name = AfkColumnNames[i];
|
||
if ((!string.IsNullOrWhiteSpace(ListOfAttributes[0]["Comment"] + "")) && (ListOfAttributes[0]["Comment"] + "").Length < 5)
|
||
{
|
||
name = ListOfAttributes[0]["Comment"] + "";
|
||
}
|
||
//当前列的值
|
||
Value = sourceRow[key] + "";
|
||
|
||
//判断是否为空
|
||
if (dataDirection == 0)
|
||
{
|
||
SaveErrorMessage += DatabaseFormatJudgment.SQLQueryVerification(SQLQueryPropertySheet, (LsColumnNames[i] + "").Trim(), Value, name);
|
||
}
|
||
else
|
||
{
|
||
SaveErrorMessage += DatabaseFormatJudgment.MYSqlVerification(MYSQLPropertySheet, (AfkColumnNames[i] + "").Trim(), Value, name);
|
||
}
|
||
}
|
||
return SaveErrorMessage;
|
||
}
|
||
#endregion
|
||
#region 获取insert语句
|
||
private void GetInsertSqlStr(DataRow sourceRow, string getSourceKeys, string afkTargeFields, string getSourceTabName, out string insertKeysStr, out string insertValuesStr, out string dataTransferSql, DataDirection dataDirection)
|
||
{
|
||
string insertKeys = "";
|
||
string insertValues = "";
|
||
string afkTargeFieldKey = "";
|
||
string insertSql = "insert into {0} ({1}) values ({2})";
|
||
string[] getSourceKeysList = getSourceKeys.Split(',');
|
||
string[] afkTargeFieldsList = afkTargeFields.Split(',');
|
||
for (int i = 0; i < sourceRow.Table.Columns.Count; i++)//循环拼接insert语句
|
||
{
|
||
string intermediateLogKey = afkTargeFieldsList[i];
|
||
string getSourceKey = getSourceKeysList[i];
|
||
string sourceKey = sourceRow.Table.Columns[i].ColumnName;
|
||
string sourceValue = sourceRow[sourceKey] + "";
|
||
if (sourceValue.Contains("'"))
|
||
sourceValue = sourceValue.Replace("'", "''");
|
||
sourceValue = GetTheRealValue(sourceRow.Table.Columns[i], sourceValue);//转换某些特殊值
|
||
if (getSourceKey.Contains("#add$_"))
|
||
{
|
||
getSourceKey = getSourceKey.Replace("#add$_", "");
|
||
afkTargeFieldKey = afkTargeFieldKey.Replace("#add$_", "");
|
||
}
|
||
insertKeys += string.Format("{0},", getSourceKey);
|
||
afkTargeFieldKey += string.Format("{0},", intermediateLogKey);
|
||
insertValues += sourceValue.Equals("null") ? string.Format("{0},", sourceValue) : string.Format("'{0}',", sourceValue);
|
||
}
|
||
insertKeysStr = afkTargeFieldKey;
|
||
insertValuesStr = insertValues;
|
||
//dataTransferSql = string.Format(insertSql, getSourceTabName, insertKeys.TrimEnd(','), insertValues.TrimEnd(','));
|
||
dataTransferSql = dataDirection == 0 ? string.Format(insertSql, getSourceTabName, insertKeys + "directTag", insertValues + "2") : string.Format(insertSql, getSourceTabName, insertKeys.TrimEnd(','), insertValues.TrimEnd(','));
|
||
}
|
||
#endregion
|
||
#region 获取update语句
|
||
private void GetUpdateSqlStr(DataRow sourceRow, string getSourceKeys, string afkTargeFields, string getSourceTabName, string getSourcePrimaryKey, string sourcePrimaryKey, out string insertLogKeysStr, out string insertLogValuesStr, out string dataTransferSql)
|
||
{
|
||
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
|
||
string insertKeys = "";
|
||
string insertValues = "";
|
||
string updateKeyValues = "";
|
||
string afkTargeFieldKey = "";
|
||
string updateSql = "update {0} set {1} where {2}";
|
||
string[] getSourceKeysList = getSourceKeys.Split(',');
|
||
string[] afkTargeFieldsList = afkTargeFields.Split(',');
|
||
for (int i = 0; i < sourceRow.Table.Columns.Count; i++)//循环拼接insert语句
|
||
{
|
||
string getSourceKey = getSourceKeysList[i];
|
||
string intermediateLogKey = afkTargeFieldsList[i];
|
||
string sourceKey = sourceRow.Table.Columns[i].ColumnName;
|
||
string sourceValue = sourceRow[sourceKey] + "";
|
||
if (sourceValue.Contains("'"))
|
||
sourceValue = sourceValue.Replace("'", "''");
|
||
sourceValue = GetTheRealValue(sourceRow.Table.Columns[i], sourceValue);//转换某些特殊值
|
||
if (getSourceKey.Contains("#add$_"))
|
||
{
|
||
afkTargeFieldKey += string.Format("{0},", intermediateLogKey);
|
||
insertKeys += string.Format("{0},", getSourceKey);
|
||
insertValues += sourceValue.Equals("null") ? string.Format("{0},", sourceValue) : string.Format("'{0}',", sourceValue);
|
||
continue;
|
||
}
|
||
updateKeyValues += sourceValue.Equals("null") ? string.Format("{0}={1},", getSourceKey, sourceValue) : string.Format("{0}='{1}',", getSourceKey, sourceValue);
|
||
afkTargeFieldKey += string.Format("{0},", intermediateLogKey);
|
||
insertKeys += string.Format("{0},", getSourceKey);
|
||
insertValues += sourceValue.Equals("null") ? string.Format("{0},", sourceValue) : string.Format("'{0}',", sourceValue);
|
||
}
|
||
insertLogKeysStr = afkTargeFieldKey;
|
||
insertLogValuesStr = insertValues;
|
||
string updateCond = string.Format("{0}='{1}'", getSourcePrimaryKey, primaryValue);
|
||
dataTransferSql = string.Format(updateSql, getSourceTabName, updateKeyValues.TrimEnd(','), updateCond);
|
||
}
|
||
#endregion
|
||
#region 获取改变状态语句
|
||
private void GetChangeStateSqlStr(DataRow sourceRow, string stateFieid, string getSourceKeys, string afkTargeFields, string getSourceTabName, string getSourcePrimaryKey, string sourcePrimaryKey, out string insertLogKeysStr, out string insertLogValuesStr, out string dataTransferSql)
|
||
{
|
||
string primaryValue = !string.IsNullOrEmpty(sourcePrimaryKey) ? sourceRow[sourcePrimaryKey] + "" : "";
|
||
string insertKeys = "";
|
||
string insertValues = "";
|
||
string afkTargeFieldKey = "";
|
||
string updateSql = "update {0} set {1} where {2}";
|
||
string[] getSourceKeysList = getSourceKeys.Split(',');
|
||
string[] afkTargeFieldsList = afkTargeFields.Split(',');
|
||
for (int i = 0; i < sourceRow.Table.Columns.Count; i++)//循环拼接insert语句
|
||
{
|
||
string getSourceKey = getSourceKeysList[i];
|
||
string intermediateLogKey = afkTargeFieldsList[i];
|
||
string sourceKey = sourceRow.Table.Columns[i].ColumnName;
|
||
string sourceValue = sourceRow[sourceKey] + "";
|
||
if (sourceValue.Contains("'"))
|
||
sourceValue = sourceValue.Replace("'", "''");
|
||
sourceValue = GetTheRealValue(sourceRow.Table.Columns[i], sourceValue);//转换某些特殊值
|
||
if (getSourceKey.Contains("#add$_"))
|
||
getSourceKey = getSourceKey.Replace("#add$_", "");
|
||
if (intermediateLogKey.Contains("#add$_"))
|
||
intermediateLogKey = intermediateLogKey.Replace("#add$_", "");
|
||
|
||
afkTargeFieldKey += string.Format("{0},", intermediateLogKey);
|
||
insertKeys += string.Format("{0},", getSourceKey);
|
||
insertValues += sourceValue.Equals("null") ? string.Format("{0},", sourceValue) : string.Format("'{0}',", sourceValue);
|
||
}
|
||
insertLogKeysStr = afkTargeFieldKey;
|
||
insertLogValuesStr = insertValues;
|
||
string updateCond = string.Format("{0}='{1}'", getSourcePrimaryKey, primaryValue);
|
||
dataTransferSql = string.Format(updateSql, getSourceTabName, stateFieid, updateCond);
|
||
}
|
||
#endregion
|
||
#region 获取logInsert语句
|
||
private void GetLogSqlStr(string[] logFields, string[] logAsFields, string[] logArgs, string insertKeysStr, string insertValuesStr, string logTabName, out string dataTransferLogSql)
|
||
{
|
||
string insertLogKeys = insertKeysStr;
|
||
string insertLogValues = insertValuesStr;
|
||
string logSqlStr = "insert into {0} ({1}) values ({2})";
|
||
for (int i = 0; i < logAsFields.Length; i++)
|
||
{
|
||
string logField = logFields[i];
|
||
string logAsField = logAsFields[i];
|
||
insertLogKeys += string.Format("{0},", logField);
|
||
if (logAsField.Equals("getdate()", StringComparison.OrdinalIgnoreCase))
|
||
insertLogValues += string.Format("{0},", "now()");
|
||
else if (logAsField.Equals("@transferLogo", StringComparison.OrdinalIgnoreCase))
|
||
insertLogValues += string.Format("'{0}',", logArgs[0]);
|
||
else if (logAsField.Equals("@errortype", StringComparison.OrdinalIgnoreCase))
|
||
insertLogValues += string.Format("'{0}',", logArgs[1]);
|
||
else if (logAsField.Equals("@errormessage", StringComparison.OrdinalIgnoreCase))
|
||
insertLogValues += string.Format("'{0}',", logArgs[2]);
|
||
else
|
||
insertLogValues += string.Format("{0},", "null");
|
||
}
|
||
dataTransferLogSql = string.Format(logSqlStr, logTabName, insertLogKeys.TrimEnd(','), insertLogValues.TrimEnd(','));
|
||
}
|
||
#endregion
|
||
#region 替换行数据
|
||
public string ReplaceRowValue(string defaultValue, DataRow row)
|
||
{
|
||
if (!string.IsNullOrWhiteSpace(defaultValue))
|
||
{
|
||
var paramList = GetParamFields(defaultValue);
|
||
foreach (string item in paramList)
|
||
{
|
||
string field = item.Replace("}", "").Replace("{", "").ToLower();
|
||
string value = row.Table.Columns.Contains(field) ? row[field] + "" : "";
|
||
defaultValue = defaultValue.Replace(item, value);
|
||
}
|
||
}
|
||
return defaultValue;
|
||
}
|
||
|
||
public List<string> GetParamFields(string defaultValue)
|
||
{
|
||
List<string> list = new List<string>();
|
||
Regex regex = new Regex("{([^{])+}");
|
||
MatchCollection mcs = regex.Matches(defaultValue);
|
||
foreach (Match item in mcs)
|
||
{
|
||
if (list.IndexOf(item.Value) == -1)
|
||
list.Add(item.Value);
|
||
}
|
||
return list;
|
||
}
|
||
#endregion
|
||
#endregion
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/// <summary>
|
||
/// <para>说明:获取中间表的主键值,没有就创建标识列</para>
|
||
/// <para>创建人:</para>
|
||
/// <para>创建日期: </para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public static string MysqlGetPrimaryKey(string TableName)
|
||
{
|
||
string PrimaryKeyName = string.Empty;
|
||
string sql = string.Format(" SHOW KEYS FROM {0} WHERE Key_name = 'PRIMARY'", TableName);
|
||
DataTable dt = MySqlHelper.ExecuteDataTable(sql);
|
||
if (dt != null && dt.Rows.Count > 0)
|
||
{
|
||
PrimaryKeyName = dt.Rows[0]["Column_name"] + "";
|
||
}
|
||
if (string.IsNullOrWhiteSpace(PrimaryKeyName))
|
||
{
|
||
//没有主键就创建自增长列
|
||
sql = string.Format(@"alter table {0} add AutoPrimaryKey BIGINT;
|
||
alter table {0} change AutoPrimaryKey AutoPrimaryKey BIGINT not null auto_increment primary key; ", TableName);
|
||
MySqlHelper.ExecuteNonQuery(sql);
|
||
PrimaryKeyName = "AutoPrimaryKey";
|
||
}
|
||
return PrimaryKeyName;
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// <para>说明:获取表的主键值</para>
|
||
/// <para>创建人:王一帆</para>
|
||
/// <para>创建日期:2020-05-07 </para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public static string GetPrimaryKey(string TableName)
|
||
{
|
||
string sqlValue = string.Format("SELECT TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME='{0}'", TableName);
|
||
DataTable dtTable = SqlHelper.ExecuteDataTable(sqlValue);
|
||
return (dtTable.Rows.Count > 0) ? dtTable.Rows[0]["COLUMN_NAME"] + "" : string.Empty;
|
||
}
|
||
/// <summary>
|
||
/// 暂停方法监测
|
||
/// </summary>
|
||
public void StopMethod()
|
||
{
|
||
if (isStop)
|
||
{
|
||
System.Threading.Thread.Sleep(1000);
|
||
StopMethod();
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 主线程刷新数据
|
||
/// </summary>
|
||
/// <param name="msg"></param>
|
||
public void RefreshLog(string msg)
|
||
{
|
||
txtLog.Text += msg;
|
||
txtLog.Select(txtLog.TextLength, 0);
|
||
txtLog.ScrollToCaret();
|
||
}
|
||
/// <summary>
|
||
/// 后台线程刷新数据
|
||
/// </summary>
|
||
/// <param name="msg"></param>
|
||
public void RefreshLogUIThread(string msg)
|
||
{
|
||
Invoke((EventHandler)delegate
|
||
{
|
||
if (msg.Equals("清空"))
|
||
{
|
||
txtLog.Clear();
|
||
txtLog.Select(txtLog.TextLength, 0);
|
||
txtLog.ScrollToCaret();
|
||
}
|
||
else
|
||
{
|
||
txtLog.Text += msg;
|
||
txtLog.Select(txtLog.TextLength, 0);
|
||
txtLog.ScrollToCaret();
|
||
}
|
||
|
||
});
|
||
}
|
||
|
||
#region 连接朗速服务器
|
||
/// <summary>
|
||
/// <para>说明:连接服务器</para>
|
||
/// <para>创建人:龚宇超</para>
|
||
/// <para>创建日期:2017-08-09 </para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="isSave">if set to <c>true</c> [is save].</param>
|
||
public bool ConnectServer(bool isSave = false)
|
||
{
|
||
string serverName = this.lsSeverId.Text.Trim();//地址
|
||
string dbName = this.lsDataBase.Text.Trim();//数据库名
|
||
string user = this.lsName.Text.Trim();//用户名
|
||
string password = this.lsPassword.Text.Trim();//密码
|
||
|
||
if (string.IsNullOrWhiteSpace(serverName))
|
||
{
|
||
MessageUtil.Show("请重新输入朗速数据库地址");
|
||
return false;
|
||
}
|
||
|
||
if (string.IsNullOrWhiteSpace(dbName))
|
||
{
|
||
MessageUtil.Show("请重新输入朗速数据库库名");
|
||
return false;
|
||
}
|
||
|
||
if (string.IsNullOrWhiteSpace(user))
|
||
{
|
||
MessageUtil.Show("请重新输入朗速数据库用户名");
|
||
return false;
|
||
}
|
||
|
||
|
||
// 测试数据库连接
|
||
try
|
||
{
|
||
if (ConnectingToDatabase())
|
||
{
|
||
if (isSave)
|
||
{
|
||
|
||
}
|
||
else
|
||
{
|
||
IniHelper.Write("LS", "serverName", serverName);
|
||
IniHelper.Write("LS", "dbName", dbName);
|
||
IniHelper.Write("LS", "user", user);
|
||
IniHelper.Write("LS", "password", password);
|
||
RefreshLogUIThread(DateTime.Now + "朗速数据库连接成功.\r\n");
|
||
return true;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
MessageUtil.Show("连接失败,请检查朗速方配置");
|
||
return false;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageUtil.Show("连接失败,请检查朗速方配置");
|
||
|
||
}
|
||
return true;
|
||
}
|
||
/// <summary>
|
||
/// <para>说明:连接服务器</para>
|
||
/// <para>创建人:龚宇超</para>
|
||
/// <para>创建日期:2017-08-09 </para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <param name="isSave">if set to <c>true</c> [is save].</param>
|
||
public bool ConnectServerOther(bool isSave = false)
|
||
{
|
||
string serverName = this.lsSeverId.Text.Trim();//地址
|
||
string dbName = this.lsDataBase.Text.Trim();//数据库名
|
||
string user = this.lsName.Text.Trim();//用户名
|
||
string password = this.lsPassword.Text.Trim();//密码
|
||
|
||
if (string.IsNullOrWhiteSpace(serverName))
|
||
{
|
||
MessageUtil.Show("请重新输入朗速数据库地址");
|
||
return false;
|
||
}
|
||
|
||
if (string.IsNullOrWhiteSpace(dbName))
|
||
{
|
||
MessageUtil.Show("请重新输入朗速数据库库名");
|
||
return false;
|
||
}
|
||
|
||
if (string.IsNullOrWhiteSpace(user))
|
||
{
|
||
MessageUtil.Show("请重新输入朗速数据库用户名");
|
||
return false;
|
||
}
|
||
|
||
|
||
// 测试数据库连接
|
||
try
|
||
{
|
||
if (ConnectingToDatabaseOther())
|
||
{
|
||
if (isSave)
|
||
{
|
||
|
||
}
|
||
else
|
||
{
|
||
IniHelper.Write("LS", "serverName", serverName);
|
||
IniHelper.Write("LS", "dbName", dbName);
|
||
IniHelper.Write("LS", "user", user);
|
||
IniHelper.Write("LS", "password", password);
|
||
return true;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
MessageUtil.Show("连接失败,请检查朗速方配置");
|
||
return false;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageUtil.Show("连接失败,请检查朗速方配置");
|
||
|
||
}
|
||
return true;
|
||
}
|
||
/// <summary>
|
||
/// <para>说明:创建数据库连接</para>
|
||
/// <para>创建人:龚宇超</para>
|
||
/// <para>创建日期:2017-08-07 </para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
|
||
public bool ConnectingToDatabase()
|
||
{
|
||
string connStr = GetConnection();
|
||
if (SqlHelper._connection != null)
|
||
{
|
||
try
|
||
{
|
||
SqlHelper._connection.Close();
|
||
SqlHelper._connection.Dispose();
|
||
}
|
||
catch (Exception)
|
||
{
|
||
}
|
||
SqlHelper._connection = null;
|
||
}
|
||
try
|
||
{
|
||
SqlHelper._connection = new SqlConnection(connStr);
|
||
SqlHelper._connection.Open();
|
||
return true;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
// LogHelper.Instance.WriteLog(ex.Message);
|
||
}
|
||
return false;
|
||
}
|
||
/// <summary>
|
||
/// <para>说明:创建数据库连接</para>
|
||
/// <para>创建人:龚宇超</para>
|
||
/// <para>创建日期:2017-08-07 </para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
|
||
public bool ConnectingToDatabaseOther()
|
||
{
|
||
string connStr = GetConnection();
|
||
if (SqlHelperOther._connection != null)
|
||
{
|
||
try
|
||
{
|
||
SqlHelperOther._connection.Close();
|
||
SqlHelperOther._connection.Dispose();
|
||
}
|
||
catch (Exception)
|
||
{
|
||
}
|
||
SqlHelperOther._connection = null;
|
||
}
|
||
try
|
||
{
|
||
SqlHelperOther._connection = new SqlConnection(connStr);
|
||
SqlHelperOther._connection.Open();
|
||
return true;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
// LogHelper.Instance.WriteLog(ex.Message);
|
||
}
|
||
return false;
|
||
}
|
||
/// <summary>
|
||
/// 获取连接服务器的字符串
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public string GetConnection()
|
||
{
|
||
return string.Format("Server={0};Database={1};Persist Security Info=True;User ID={2};Password={3};Connection Timeout=5;MultipleActiveResultSets=true", lsSeverId.Text + "", lsDataBase.Text + "", lsName.Text + "", lsPassword.Text + "");
|
||
}
|
||
#endregion
|
||
#region 连接Afk服务器
|
||
public bool ConnectMySql(bool isSave = false)
|
||
{
|
||
string connStr = GetConnection2();
|
||
string serverName = this.afkSeverId.Text.Trim();//地址
|
||
string port = this.afkPortNumber.Text.Trim();//端口
|
||
string dbName = this.afkDataBase.Text.Trim();//数据库名
|
||
string user = this.afkName.Text.Trim();//用户名
|
||
string password = this.afkPassword.Text.Trim();//密码
|
||
|
||
if (string.IsNullOrWhiteSpace(serverName))
|
||
{
|
||
MessageUtil.Show("请重新输入Afk数据库地址");
|
||
return false;
|
||
}
|
||
|
||
if (string.IsNullOrWhiteSpace(port))
|
||
{
|
||
MessageUtil.Show("请重新输入Afk数据库端口");
|
||
return false;
|
||
}
|
||
|
||
if (string.IsNullOrWhiteSpace(dbName))
|
||
{
|
||
MessageUtil.Show("请重新输入Afk数据库库名");
|
||
return false;
|
||
}
|
||
|
||
if (string.IsNullOrWhiteSpace(user))
|
||
{
|
||
MessageUtil.Show("请重新输入Afk数据库用户名");
|
||
return false;
|
||
}
|
||
|
||
// 测试数据库连接
|
||
try
|
||
{
|
||
if (ConnectingToDatabase2())
|
||
{
|
||
if (isSave)
|
||
{
|
||
|
||
}
|
||
else
|
||
{
|
||
IniHelper.Write("AFK", "serverName", serverName);
|
||
IniHelper.Write("AFK", "port", port);
|
||
IniHelper.Write("AFK", "dbName", dbName);
|
||
IniHelper.Write("AFK", "user", user);
|
||
IniHelper.Write("AFK", "password", password);
|
||
RefreshLogUIThread(DateTime.Now + "AFK数据库连接成功.\r\n");
|
||
return true;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
MessageUtil.Show("连接失败,请检查AFK方配置");
|
||
return false;
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageUtil.Show("连接失败,请检查AFK方配置");
|
||
|
||
}
|
||
return true;
|
||
|
||
return true;
|
||
}
|
||
|
||
/// <summary>
|
||
/// <para>说明:创建数据库连接</para>
|
||
/// <para>创建人:龚宇超</para>
|
||
/// <para>创建日期:2017-08-07 </para>
|
||
/// <para>修改人:</para>
|
||
/// <para>修改日期:</para>
|
||
/// <para>修改备注:</para>
|
||
/// <para>版本:1.0</para>
|
||
/// </summary>
|
||
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
|
||
public bool ConnectingToDatabase2()
|
||
{
|
||
string connStr = GetConnection2();
|
||
if (MySqlHelper._connection != null)
|
||
{
|
||
try
|
||
{
|
||
MySqlHelper._connection.Close();
|
||
MySqlHelper._connection.Dispose();
|
||
}
|
||
catch (Exception)
|
||
{
|
||
}
|
||
MySqlHelper._connection = null;
|
||
}
|
||
try
|
||
{
|
||
MySqlHelper._connection = new MySqlConnection(connStr);
|
||
MySqlHelper._connection.Open();
|
||
return true;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
// LogHelper.Instance.WriteLog(ex.Message);
|
||
}
|
||
return false;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取连接服务器的字符串
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public string GetConnection2()
|
||
{
|
||
return string.Format("Data Source={0};Port={1};Database={2};User ID={3};Password={4};Charset=utf8;Convert Zero Datetime=True;", afkSeverId.Text + "", afkPortNumber.Text + "", afkDataBase.Text + "", afkName.Text + "", afkPassword.Text + "");
|
||
}
|
||
#endregion
|
||
#region 按钮浮动事件
|
||
private void OnStartBtn_MouseLeave(object sender, EventArgs e)
|
||
{
|
||
DevExpress.XtraEditors.SimpleButton btn = (DevExpress.XtraEditors.SimpleButton)sender;
|
||
btn.Appearance.BackColor = Color.FromArgb(52, 142, 216);
|
||
}
|
||
|
||
private void OnStartBtn_MouseHover(object sender, EventArgs e)
|
||
{
|
||
DevExpress.XtraEditors.SimpleButton btn = (DevExpress.XtraEditors.SimpleButton)sender;
|
||
btn.Appearance.BackColor = Color.FromArgb(140, 208, 1);
|
||
}
|
||
private void OnStopBtn_MouseLeave(object sender, EventArgs e)
|
||
{
|
||
DevExpress.XtraEditors.SimpleButton btn = (DevExpress.XtraEditors.SimpleButton)sender;
|
||
btn.Appearance.BackColor = Color.FromArgb(52, 142, 216);
|
||
}
|
||
private void OnStoptBtn_MouseHover(object sender, EventArgs e)
|
||
{
|
||
if (this.startBtn.Appearance.BackColor != Color.FromArgb(52, 142, 216))
|
||
{
|
||
this.startBtn.Appearance.BackColor = Color.FromArgb(52, 142, 216);
|
||
}
|
||
DevExpress.XtraEditors.SimpleButton btn = (DevExpress.XtraEditors.SimpleButton)sender;
|
||
btn.Appearance.BackColor = Color.FromArgb(140, 208, 1);
|
||
}
|
||
#endregion
|
||
#region 初始化数据配置页
|
||
private void InitializeDataSettings()
|
||
{
|
||
if (ConnectServerOther())
|
||
{
|
||
string explainSql = @"SELECT
|
||
A.name AS table_name,
|
||
B.name AS column_name,
|
||
C.value AS column_description
|
||
FROM sys.tables A
|
||
INNER JOIN sys.columns B ON B.object_id = A.object_id
|
||
LEFT JOIN sys.extended_properties C ON C.major_id = B.object_id AND C.minor_id = B.column_id
|
||
WHERE A.name = 'P_synchrTab'";
|
||
DataTable explainTab = SqlHelperOther.ExecuteDataTable(explainSql);
|
||
DataTable sourceTab = SqlHelperOther.ExecuteDataTable("select * from P_synchrTab");
|
||
this.gridView.Columns.Clear();
|
||
this.gridControl.DataSource = sourceTab;
|
||
foreach (GridColumn gridColumn in this.gridView.Columns)
|
||
{
|
||
DataRow[] captionRows = explainTab.Select(string.Format("{0}='{1}'", "column_name", gridColumn.FieldName));
|
||
if (captionRows.Count() > 0)
|
||
{
|
||
DataRow captionRow = captionRows[0];
|
||
gridColumn.Caption = captionRow["column_description"] + "";
|
||
}
|
||
if (gridColumn.FieldName.Equals("synchroSql") || gridColumn.FieldName.Equals("targetTabSql") || gridColumn.FieldName.Equals("synLogSql") || gridColumn.FieldName.Equals("afterSql") || gridColumn.FieldName.Equals("relevanceSql") || gridColumn.FieldName.Equals("disableField"))
|
||
{
|
||
RepositoryItemMemoExEdit reEdit = new RepositoryItemMemoExEdit();
|
||
reEdit.ScrollBars = ScrollBars.Vertical;
|
||
gridControl.RepositoryItems.Add(reEdit);
|
||
gridColumn.ColumnEdit = reEdit;
|
||
}
|
||
if (gridColumn.FieldName.Equals("directionTag"))
|
||
{
|
||
DataTable directionTab = new DataTable();
|
||
directionTab.Columns.Add("dm");
|
||
directionTab.Columns.Add("mc");
|
||
directionTab.Rows.Add("0", "同步到朗速");
|
||
directionTab.Rows.Add("1", "同步到中航");
|
||
directionTab.Rows.Add("10", "不同步");
|
||
|
||
RepositoryItemLookUpEdit comboxEdit = new RepositoryItemLookUpEdit();
|
||
comboxEdit.SearchMode = SearchMode.AutoFilter;
|
||
comboxEdit.ShowHeader = false;
|
||
comboxEdit.ImmediatePopup = false;
|
||
comboxEdit.NullText = "";
|
||
comboxEdit.PopupBorderStyle = PopupBorderStyles.Flat;
|
||
comboxEdit.AllowNullInput = DefaultBoolean.False;
|
||
comboxEdit.DisplayMember = "mc";
|
||
comboxEdit.ValueMember = "dm";
|
||
//comboxEdit.DataSource = MainImpl.GetDataTableResult(model.SqlSource);
|
||
|
||
|
||
LookUpColumnInfo valueColumn = new LookUpColumnInfo();
|
||
valueColumn.Caption = "编码";
|
||
valueColumn.FieldName = "dm";
|
||
valueColumn.Visible = false;
|
||
|
||
LookUpColumnInfo textColumn = new LookUpColumnInfo();
|
||
textColumn.Caption = "名称";
|
||
textColumn.FieldName = "mc";
|
||
|
||
comboxEdit.Columns.AddRange(new LookUpColumnInfo[] { valueColumn, textColumn });
|
||
gridControl.RepositoryItems.Add(comboxEdit);
|
||
gridColumn.ColumnEdit = comboxEdit;
|
||
comboxEdit.DataSource = directionTab;
|
||
}
|
||
if (gridColumn.FieldName.Equals("disableTag"))
|
||
{
|
||
RepositoryItemCheckEdit comboxEdit = new RepositoryItemCheckEdit();
|
||
comboxEdit.ValueChecked = "false";
|
||
comboxEdit.ValueUnchecked = "true";
|
||
gridControl.RepositoryItems.Add(comboxEdit);
|
||
gridColumn.ColumnEdit = comboxEdit;
|
||
}
|
||
if (gridColumn.FieldName.Equals("id") || gridColumn.FieldName.Equals("rightKeyTag"))
|
||
{
|
||
gridColumn.Visible = false;
|
||
}
|
||
}
|
||
this.gridView.BestFitColumns();
|
||
//this.gridView.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.CheckBoxRowSelect;
|
||
this.gridView.OptionsSelection.MultiSelect = false;
|
||
this.gridView.OptionsBehavior.EditorShowMode = DevExpress.Utils.EditorShowMode.MouseDownFocused;
|
||
this.contextMenuStrip.ItemClicked += new ToolStripItemClickedEventHandler(OnContextMenuStrip_ItemClicked);
|
||
}
|
||
}
|
||
#endregion
|
||
/// <summary>
|
||
/// 新增按钮
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
private void addBtn_Click(object sender, EventArgs e)
|
||
{
|
||
DataTable tab = new DataTable();
|
||
tab = (this.gridControl.DataSource as DataTable).Copy();
|
||
if (tab.Rows.Count > 0)
|
||
{
|
||
tab.DefaultView.Sort = "ID ASC";
|
||
DataRow lastRow = tab.DefaultView.ToTable().Rows[tab.Rows.Count - 1];
|
||
if ((lastRow["id"] + "").Equals("9999999"))
|
||
{
|
||
if (tab.Rows.Count > 1)
|
||
{
|
||
DataRow NRow = tab.NewRow();
|
||
NRow["id"] = Convert.ToInt32(tab.DefaultView.ToTable().Rows[tab.Rows.Count - 2]["id"] + "") + 1;
|
||
tab.Rows.Add(NRow);
|
||
}
|
||
else
|
||
{
|
||
DataRow NRow = tab.NewRow();
|
||
NRow["id"] = 1;
|
||
tab.Rows.Add(NRow);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
DataRow NRow = tab.NewRow();
|
||
NRow["id"] = Convert.ToInt32(tab.DefaultView.ToTable().Rows[tab.Rows.Count - 1]["id"] + "") + 1;
|
||
tab.Rows.Add(NRow);
|
||
}
|
||
this.gridControl.DataSource = tab;
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 保存按钮
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
private void savebtn_Click(object sender, EventArgs e)
|
||
{
|
||
try
|
||
{
|
||
if (ConnectServerOther())
|
||
{
|
||
DataTable sourceTab = SqlHelperOther.ExecuteDataTable("select * from P_synchrTab");
|
||
DataTable tab = this.gridControl.DataSource as DataTable;
|
||
string allSqlStr = string.Empty;
|
||
foreach (DataRow row in tab.Rows)
|
||
{
|
||
if (row.RowState == DataRowState.Added)
|
||
{
|
||
string addSqlStr = "insert into P_synchrTab ({0}) values ({1});\r\n";
|
||
string sqlKey = string.Empty;
|
||
string sqlValues = string.Empty;
|
||
foreach (DataColumn col in row.Table.Columns)
|
||
{
|
||
sqlKey += string.Format("{0},", col.ColumnName);
|
||
sqlValues += string.Format("'{0}',", (row[col.ColumnName] + "").Replace("'", "''"));
|
||
}
|
||
allSqlStr += string.Format(addSqlStr, sqlKey.TrimEnd(','), sqlValues.TrimEnd(','));
|
||
}
|
||
else if (row.RowState == DataRowState.Modified)
|
||
{
|
||
string updateSqlStr = "update P_synchrTab set {0} = '{1}' where {2} = '{3}';\r\n";
|
||
DataRow[] sourceRows = sourceTab.Select(string.Format("id='{0}'", row["id"] + ""));
|
||
if (sourceRows.Count() > 0)
|
||
{
|
||
DataRow sourceRow = sourceRows[0];
|
||
foreach (DataColumn col in row.Table.Columns)
|
||
{
|
||
if (!(row[col.ColumnName] + "").Equals(sourceRow[col.ColumnName] + ""))
|
||
{
|
||
allSqlStr += string.Format(updateSqlStr, col.ColumnName, (row[col.ColumnName] + "").Replace("'", "''"), "id", row["id"] + "");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
try
|
||
{
|
||
DialogResult dialogResult = MessageUtil.Show("是否保存当前数据?", MessageBoxButtons.OKCancel);
|
||
if (dialogResult == DialogResult.OK)
|
||
{
|
||
if (!string.IsNullOrWhiteSpace(allSqlStr)) SqlHelperOther.ExecuteNonQuery(allSqlStr);
|
||
|
||
MessageUtil.Show("保存成功");
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageUtil.Show(string.Format("保存失败,原因:{0}", ex.Message));
|
||
}
|
||
}
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageUtil.Show(ex.Message);
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 右键菜单
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
private void OnContextMenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
|
||
{
|
||
try
|
||
{
|
||
if (ConnectServerOther())
|
||
{
|
||
DataTable sourceTab = SqlHelperOther.ExecuteDataTable("select * from P_synchrTab");
|
||
DataTable dataTab = this.gridControl.DataSource as DataTable;
|
||
DataRow row = this.gridView.GetDataRow(this.gridView.FocusedRowHandle);
|
||
switch (e.ClickedItem.Name)
|
||
{
|
||
case "AbutmentNowRow":
|
||
string updateSql = "update P_synchrTab set rightKeyTag = '1' where id = {0}";
|
||
int updateResult = SqlHelperOther.ExecuteNonQuery(string.Format(updateSql, row["id"] + ""));
|
||
break;
|
||
case "disableRowData":
|
||
string disableSql = "update P_synchrTab set disableTag = 'false' where id = {0}";
|
||
int disableResult = SqlHelperOther.ExecuteNonQuery(string.Format(disableSql, row["id"] + ""));
|
||
DataRow[] findDisRows = dataTab.Select(string.Format("id='{0}'", row["id"] + ""));
|
||
if (findDisRows.Count() > 0)
|
||
{
|
||
DataRow findDisRow = findDisRows[0];
|
||
findDisRow["disableTag"] = "false";
|
||
}
|
||
break;
|
||
case "disablement":
|
||
string disablementSql = "update P_synchrTab set disableTag = 'true' where id = {0}";
|
||
int disablementResult = SqlHelperOther.ExecuteNonQuery(string.Format(disablementSql, row["id"] + ""));
|
||
DataRow[] findUndisRows = dataTab.Select(string.Format("id='{0}'", row["id"] + ""));
|
||
if (findUndisRows.Count() > 0)
|
||
{
|
||
DataRow findUndisRow = findUndisRows[0];
|
||
findUndisRow["disableTag"] = "true";
|
||
}
|
||
break;
|
||
case "deleteNowRow":
|
||
DialogResult result = MessageUtil.Show("是否确定删除当前选中行?", MessageBoxButtons.OKCancel);
|
||
if (result == DialogResult.OK)
|
||
{
|
||
DataRow[] selectRows = sourceTab.Select(string.Format("id='{0}'", row["id"] + ""));
|
||
if (selectRows.Count() > 0)
|
||
{
|
||
string deleteSql = "delete P_synchrTab where id ='{0}'";
|
||
SqlHelperOther.ExecuteNonQuery(string.Format(deleteSql, row["id"] + ""));
|
||
dataTab.Rows.Remove(row);
|
||
MessageUtil.Show("删除成功");
|
||
}
|
||
else
|
||
{
|
||
dataTab.Rows.Remove(row);
|
||
MessageUtil.Show("删除成功");
|
||
}
|
||
}
|
||
break;
|
||
case "Refresh":
|
||
this.gridControl.DataSource = SqlHelperOther.ExecuteDataTable("select * from P_synchrTab");
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageUtil.Show(ex.Message);
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 快捷键
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
private void Form1_KeyDown(object sender, KeyEventArgs e)
|
||
{
|
||
if (e.KeyCode == Keys.F1)
|
||
{
|
||
ConfigurationTool configurationTool = new ConfigurationTool();
|
||
configurationTool.Show();
|
||
}
|
||
}
|
||
|
||
|
||
private void simpleButton1_Click(object sender, EventArgs e)
|
||
{
|
||
DataRow dr = gridView.GetFocusedDataRow();
|
||
ConfigurationTool configurationTool = new ConfigurationTool();
|
||
configurationTool.returnContent += new ConfigurationTool.ReturnContent(returnContent);
|
||
if (dr != null)
|
||
{
|
||
configurationTool.SegmentedContent = dr["synchroSql"] + "";
|
||
configurationTool.DirectionTag = dr["directionTag"] + "";
|
||
}
|
||
configurationTool.ShowDialog();
|
||
|
||
}
|
||
|
||
private void returnContent(string value)
|
||
{
|
||
DataRow dr = gridView.GetFocusedDataRow();
|
||
dr["synchroSql"] = value;
|
||
this.savebtn_Click(null, null);
|
||
}
|
||
}
|
||
}
|