diff --git a/CnasSynchronusClient/CnasSynchronusBLL.csproj b/CnasSynchronusClient/CnasSynchronusBLL.csproj
index 013fc5a..66a9e69 100644
--- a/CnasSynchronusClient/CnasSynchronusBLL.csproj
+++ b/CnasSynchronusClient/CnasSynchronusBLL.csproj
@@ -54,6 +54,7 @@
+
diff --git a/CnasSynchronusDAL/CnasSynchronusDAL.csproj b/CnasSynchronusDAL/CnasSynchronusDAL.csproj
index 7fff2e1..60e5236 100644
--- a/CnasSynchronusDAL/CnasSynchronusDAL.csproj
+++ b/CnasSynchronusDAL/CnasSynchronusDAL.csproj
@@ -151,6 +151,7 @@
+
@@ -180,6 +181,7 @@
+
diff --git a/CnasSynchronusDAL/DAL/DmDAL.cs b/CnasSynchronusDAL/DAL/DmDAL.cs
new file mode 100644
index 0000000..3bb987d
--- /dev/null
+++ b/CnasSynchronusDAL/DAL/DmDAL.cs
@@ -0,0 +1,571 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Data;
+using CnasSynchronousCommon;
+using CnasSynchrousModel;
+using System.Reflection;
+using Dm;
+
+namespace CnasSynchronusDAL
+{
+ public class DmDAL
+ {
+ public void CreateConnectString(string strIP, string strPort, string strName, string strUser, string strPwd)
+ {
+ DamengHelper.InitConnectionString(strIP, strPort, strName, strUser, strPwd);
+ }
+
+ public void CreateConnectString(string strConnectString)
+ {
+ DamengHelper.InitConnectionString(strConnectString);
+ }
+
+ //获取所有表单名称
+ public DataTable GetTableNames(string strName)
+ {
+ DataTable dt = new DataTable();
+ string strSql = string.Format("SELECT table_name as TABNAME FROM user_tables WHERE owner='{0}'", strName);
+ try
+ {
+ dt = DamengHelper.ExecuteDataSet(strSql).Tables[0];
+ }
+ catch (Exception ex)
+ {
+ AppLog.Error(ex.Message);
+ }
+ return dt;
+ }
+
+ ///
+ /// 获取某表的表结构
+ ///
+ public DataTable GetTableStruct(string strTableName, string strViewName, string strViewSql)
+ {
+ DataTable dt = new DataTable();
+ if (strTableName.Length <= 0) return dt;
+ string strSql = "";
+ if (strViewName == strTableName && !string.IsNullOrWhiteSpace(strViewName))
+ strSql = strViewSql + " where 0=1";
+ else
+ strSql = string.Format("SELECT * FROM {0} Where 0=1", strTableName);
+ try
+ {
+ dt = DamengHelper.ExecuteDataSet(strSql).Tables[0];
+ }
+ catch (Exception ex)
+ {
+ AppLog.Error(ex.Message);
+ }
+ return dt;
+ }
+
+ ///
+ /// 获取某表的表结构和类型长度
+ ///
+ public DataTable GetTableTypeAndLenth(string strTableName)
+ {
+ DataTable dt = new DataTable();
+ string strSql = string.Format(@"SELECT
+ COLUMN_NAME AS 'ColumnName',
+ NULLABLE AS 'IsNullable',
+ DATA_TYPE AS 'DataType',
+ DATA_LENGTH AS 'CharMaxLenth',
+ DATA_LENGTH AS 'CharOcterLenth',
+ DATA_PRECISION AS 'NumericPrecision',
+ DATA_SCALE AS 'NumericScale'
+ FROM USER_TAB_COLUMNS
+ WHERE TABLE_NAME = '{0}'", strTableName);
+ try
+ {
+ dt = DamengHelper.ExecuteDataSet(strSql).Tables[0];
+ }
+ catch (Exception ex)
+ {
+ AppLog.Error(ex.Message);
+ }
+ return dt;
+ }
+
+ ///
+ /// 逐行批量插入数据
+ ///
+ public int InsertCnasData(DataTable dt, List syncParamasInfos, List lstFixedValue, string strInsumentColumn)
+ {
+ int iReturn = 0;
+ if (dt.Rows.Count <= 0) return 0;
+ try
+ {
+ //获取唯一健组(关键字段)
+ var query = from p in syncParamasInfos
+ where p.IfPrimaryKey == true
+ select new
+ {
+ p.TargetField
+ };
+ List lstKeyColumns = new List();
+ foreach (var item in query)
+ {
+ lstKeyColumns.Add(item.TargetField);
+ }
+
+ //构建SQL语句
+ string strSql_part1 = "";
+ string strSql_part2 = "";
+ List lstColumnName = new List();
+ foreach (var item in syncParamasInfos)
+ {
+ if (!lstColumnName.Contains(item.TargetField.ToLower()))
+ {
+ strSql_part1 += item.TargetField + ",";
+ strSql_part2 += string.Format(":{0},", item.TargetField.ToLower());
+ lstColumnName.Add(item.TargetField.ToLower());
+ }
+ }
+
+ //固定列处理
+ if (lstFixedValue != null)
+ {
+ foreach (var cnasfield in lstFixedValue)
+ {
+ if (cnasfield.TableName != syncParamasInfos[0].TargetTable) continue;
+ if (!lstColumnName.Contains(cnasfield.ColumnName.ToLower()))
+ {
+ strSql_part1 += cnasfield.ColumnName + ",";
+ strSql_part2 += string.Format(":{0},", cnasfield.ColumnName.ToLower());
+ lstColumnName.Add(cnasfield.ColumnName.ToLower());
+ }
+ }
+ }
+
+ //增加仪器编号数据
+ if (!string.IsNullOrWhiteSpace(strInsumentColumn) && !lstColumnName.Contains(strInsumentColumn.ToLower()))
+ {
+ strSql_part1 += strInsumentColumn + ",";
+ strSql_part2 += string.Format(":{0},", strInsumentColumn);
+ lstColumnName.Add(strInsumentColumn.ToLower());
+ }
+
+ string strInsertSql = string.Format("insert into {0}({1}) values({2})",
+ syncParamasInfos[0].TargetTable,
+ strSql_part1.Substring(0, strSql_part1.Length - 1),
+ strSql_part2.Substring(0, strSql_part2.Length - 1));
+
+ string strUpdateSql = "";
+ DataTable dtSelect = new DataTable();
+
+ foreach (DataRow dr in dt.Rows)
+ {
+ //插入参数值
+ DmParameter[] parameters = new DmParameter[lstColumnName.Count];
+ int i = 0;
+ foreach (var item in lstColumnName)
+ {
+ parameters[i++] = new DmParameter(item, dr[item]);
+ }
+
+ //检查是否存在数据
+ int ifHavaValue = ExistSingleCnasData(lstKeyColumns, syncParamasInfos[0].TargetTable, dr, ref dtSelect);
+ if (ifHavaValue == 1)
+ {
+ if (dtSelect.Rows.Count == 1)
+ {
+ //比对数据是否一致
+ if (!CompareObjectOperation.DataRowCompare(dtSelect.Rows[0], dr, lstColumnName))
+ {
+ //构造更新语句
+ strUpdateSql = GetUpdateSql(lstColumnName, lstKeyColumns, syncParamasInfos[0].TargetTable, dr);
+ //执行UpdateSql语句
+ iReturn += DamengHelper.ExecuteNonQuery(strUpdateSql, parameters);
+ }
+ else
+ {
+ iReturn = -2;
+ AppLog.Info("更新时发现在数据库中相同关键字段数据一致。");
+ }
+ }
+ else
+ {
+ AppLog.Error("更新时发现在数据库中多条相同关键字段数据,请重新配置关键字段。");
+ }
+ }
+ else if (ifHavaValue == 0)
+ {
+ //执行InsertSQL语句
+ iReturn += DamengHelper.ExecuteNonQuery(strInsertSql, parameters);
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ if (!LinkCnasTest())
+ {
+ iReturn = -1; //用于表示插入时无法正常数据库连接问题
+ }
+ AppLog.Error(ex.Message);
+ }
+ return iReturn;
+ }
+
+ ///
+ /// 拼接Update语句
+ ///
+ private string GetUpdateSql(List lstColumnName, List lstPrimaryColumn, string strTableName, DataRow dr)
+ {
+ //构造关键字段条件
+ string strsql_partial = "";
+ foreach (var item in lstPrimaryColumn)
+ {
+ if (dr.Table.Columns.Contains(item.ToString()))
+ if (dr[item.ToString()].ToString() != "")
+ strsql_partial += $"{item.ToString()}='{dr[item.ToString()].ToString()}' and ";
+ else
+ strsql_partial += $"({item.ToString()}='{dr[item.ToString()].ToString()}' or {item.ToString()} is null) and ";
+ }
+
+ //构造Update语句
+ string strUpdateSql = "";
+ string strsql_partial2 = "";
+ foreach (var item in lstColumnName)
+ {
+ strsql_partial2 += $"{item}=:{item},";
+ }
+
+ if (strsql_partial.Length > 3 && strsql_partial2.Length > 0)
+ strUpdateSql = $"update {strTableName} set {strsql_partial2.Substring(0, strsql_partial2.Length - 1)} where {strsql_partial.Substring(0, strsql_partial.Length - 4)}";
+
+ return strUpdateSql;
+ }
+
+ ///
+ /// 是否数据库中已经存在数据
+ ///
+ private int ExistSingleCnasData(List lstPrimaryColumn, string strTableName, DataRow dr, ref DataTable dtSelect)
+ {
+ int bIfHaveValue = 0;
+ string strsql_partial = "";
+ string strSql = "";
+ foreach (var item in lstPrimaryColumn)
+ {
+ if (dr.Table.Columns.Contains(item.ToString()))
+ if (dr[item.ToString()].ToString() != "")
+ strsql_partial += $"{item.ToString()}='{dr[item.ToString()].ToString()}' and ";
+ else
+ strsql_partial += $"({item.ToString()}='{dr[item.ToString()].ToString()}' or {item.ToString()} is null) and ";
+ }
+ if (strsql_partial.Length > 3)
+ strSql = $"select * from {strTableName} where {strsql_partial.Substring(0, strsql_partial.Length - 4)}";
+
+ if (strSql != "")
+ {
+ DataTable dt = DamengHelper.ExecuteDataTable(strSql, new DmParameter[] { });
+ if (dt != null && dt.Rows.Count > 0)
+ {
+ bIfHaveValue = 1;
+ dtSelect = dt;
+ AppLog.Info($"插入前查询时存在重复数据:{strSql}");
+ }
+ else if (dt == null)
+ {
+ bIfHaveValue = -1;
+ AppLog.Info($"插入前查询时发生了异常:{strSql}");
+ }
+ }
+ return bIfHaveValue;
+ }
+
+ public bool LinkCnasTest()
+ {
+ return DamengHelper.TestConnectDameng();
+ }
+
+ ///
+ /// 获得表中该列中最大时间
+ ///
+ public string GetMaxTimeByTableName(string strTableName, string strDateColumn, string strInstrumentColumn, string strInstrumentValue)
+ {
+ string strReturnTime = "";
+ try
+ {
+ string strSql = $"SELECT TO_CHAR(MAX({strDateColumn}), 'YYYY-MM-DD HH24:MI:SS') FROM {strTableName}";
+ if (!string.IsNullOrWhiteSpace(strInstrumentColumn) && !string.IsNullOrWhiteSpace(strInstrumentValue))
+ strSql += $" WHERE {strInstrumentColumn}='{strInstrumentValue}'";
+
+ string strDateTime = GetMaxTimeByTableName(strSql);
+ DateTime dateTime = DateTime.Now;
+ if (DateTime.TryParse(strDateTime, out dateTime))
+ {
+ strReturnTime = strDateTime;
+ }
+ }
+ catch (Exception ex)
+ {
+ strReturnTime = "1899-1-1";
+ AppLog.Error(ex.Message);
+ }
+ return strReturnTime;
+ }
+
+ internal DataTable GetDataByDateColumn(string strDBName, string strViewName, string strViewSql, string strTableName, string strDateColumn, string strDate)
+ {
+ DataTable dtReturn = new DataTable();
+ try
+ {
+ string strSql = "";
+ if (strViewName == strTableName && !string.IsNullOrWhiteSpace(strViewName))
+ strSql = strViewSql + $" where {strDateColumn} > TO_DATE('{strDate}', 'YYYY-MM-DD HH24:MI:SS')";
+ else
+ strSql = $"select * from {strTableName} where {strDateColumn} > TO_DATE('{strDate}', 'YYYY-MM-DD HH24:MI:SS')";
+
+ DataTable dt = DamengHelper.ExecuteDataSet(strSql).Tables[0];
+
+ Dictionary dictFiled = GetSpecialOperaField(strDBName, strTableName);
+ if (dictFiled.Count > 0)
+ dtReturn = DateAndTimeTypeOpera(dt, dictFiled);
+ else
+ dtReturn = dt;
+ }
+ catch (Exception ex)
+ {
+ AppLog.Error(ex.Message);
+ throw ex;
+ }
+ return dtReturn;
+ }
+
+ internal Dictionary GetAllTableNameAndStructure(string strDBName)
+ {
+ Dictionary dictTables = new Dictionary();
+ try
+ {
+ DataTable TablesName = GetTableNames(strDBName);
+ foreach (DataRow dr in TablesName.Rows)
+ {
+ string strTableName = dr[0].ToString();
+ dictTables.Add(strTableName.ToUpper(), GetTableStruct(strTableName, "", ""));
+ }
+ }
+ catch (Exception ex)
+ {
+ AppLog.Error(ex.Message);
+ }
+ return dictTables;
+ }
+
+ private string GetMaxTimeByTableName(string strSql)
+ {
+ string strDateTime = "";
+ try
+ {
+ DataTable dt = DamengHelper.ExecuteDataSet(strSql).Tables[0];
+ if (dt != null && dt.Rows.Count == 1)
+ {
+ strDateTime = dt.Rows[0][0].ToString();
+ }
+ }
+ catch (Exception ex)
+ {
+ if (!LinkCnasTest())
+ {
+ strDateTime = "1899-1-1";
+ }
+ AppLog.Error(ex.Message);
+ }
+ return strDateTime;
+ }
+
+ ///
+ /// 获取特殊处理字段
+ ///
+ private Dictionary GetSpecialOperaField(string strDBName, string strTableName)
+ {
+ Dictionary DictFiled = new Dictionary();
+ try
+ {
+ string sql = $"SELECT COLUMN_NAME, DATA_TYPE FROM USER_TAB_COLUMNS WHERE TABLE_NAME='{strTableName}'";
+ DataTable dt = DamengHelper.ExecuteDataSet(sql).Tables[0];
+
+ foreach (DataRow dr in dt.Rows)
+ {
+ string dataType = dr["DATA_TYPE"].ToString().ToLower();
+ if (dataType == "date" || dataType == "time" || dataType == "timestamp")
+ {
+ DictFiled.Add(dr["COLUMN_NAME"].ToString(), dataType);
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ AppLog.Error(ex.Message);
+ }
+ return DictFiled;
+ }
+
+ ///
+ /// 处理日期时间类型数据
+ ///
+ private DataTable DateAndTimeTypeOpera(DataTable dt, Dictionary DictSpecialField)
+ {
+ DataTable dtNewFormat = new DataTable();
+
+ //添加列
+ foreach (DataColumn dc in dt.Columns)
+ {
+ if (DictSpecialField.ContainsKey(dc.ColumnName))
+ {
+ string strDateType = DictSpecialField[dc.ColumnName];
+ switch (strDateType.ToLower())
+ {
+ case "date":
+ case "time":
+ case "timestamp":
+ dtNewFormat.Columns.Add(dc.ColumnName, typeof(string));
+ break;
+ default:
+ dtNewFormat.Columns.Add(dc.ColumnName, dc.DataType);
+ break;
+ }
+ }
+ else
+ {
+ dtNewFormat.Columns.Add(dc.ColumnName, dc.DataType);
+ }
+ }
+
+ //添加数据
+ foreach (DataRow dr in dt.Rows)
+ {
+ DataRow drNewRow = dtNewFormat.NewRow();
+ foreach (DataColumn dc in dtNewFormat.Columns)
+ {
+ if (!DictSpecialField.ContainsKey(dc.ColumnName))
+ drNewRow[dc.ColumnName] = dr[dc.ColumnName];
+ else
+ {
+ if (dr[dc.ColumnName] != null && dr[dc.ColumnName].ToString() != "")
+ {
+ switch (DictSpecialField[dc.ColumnName].ToLower())
+ {
+ case "date":
+ drNewRow[dc.ColumnName] = Convert.ToDateTime(dr[dc.ColumnName]).ToString("yyyy-MM-dd");
+ break;
+ case "time":
+ drNewRow[dc.ColumnName] = Convert.ToDateTime(dr[dc.ColumnName]).ToString("HH:mm:ss");
+ break;
+ case "timestamp":
+ drNewRow[dc.ColumnName] = Convert.ToDateTime(dr[dc.ColumnName]).ToString("yyyy-MM-dd HH:mm:ss");
+ break;
+ default:
+ drNewRow[dc.ColumnName] = dr[dc.ColumnName];
+ break;
+ }
+ }
+ }
+ }
+ dtNewFormat.Rows.Add(drNewRow);
+ }
+
+ return dtNewFormat;
+ }
+
+ ///
+ /// 获取表数据
+ ///
+ public DataTable GetTableData(string strSql)
+ {
+ DataTable dt = new DataTable();
+ try
+ {
+ dt = DamengHelper.ExecuteDataSet(strSql).Tables[0];
+ }
+ catch (Exception ex)
+ {
+ AppLog.Error(ex.Message);
+ }
+ return dt;
+ }
+
+ ///
+ /// 插入表数据
+ ///
+ public bool InsertTableData(string strSql)
+ {
+ try
+ {
+ return DamengHelper.ExecuteNonQuery(strSql) > 0;
+ }
+ catch (Exception ex)
+ {
+ AppLog.Error(ex.Message);
+ }
+ return false;
+ }
+
+ ///
+ /// 根据用户名和密码获取登录名
+ ///
+ public string GetLoginNameByPwd(string strUser, string strPwd)
+ {
+ string strLoginName = "";
+ try
+ {
+ string strSql = string.Format("SELECT loginname FROM sys_user WHERE username='{0}' and password='{1}'", strUser, strPwd);
+ DataTable dt = DamengHelper.ExecuteDataSet(strSql).Tables[0];
+ if (dt != null && dt.Rows.Count > 0)
+ {
+ strLoginName = dt.Rows[0][0].ToString();
+ }
+ }
+ catch (Exception ex)
+ {
+ AppLog.Error(ex.Message);
+ }
+ return strLoginName;
+ }
+
+ ///
+ /// 检查MAC地址信息
+ ///
+ public bool CheckMacMessage(string strMac)
+ {
+ bool bIfSuccess = false;
+ try
+ {
+ string strSql = string.Format("SELECT * FROM sys_mac WHERE mac='{0}'", strMac);
+ DataTable dt = DamengHelper.ExecuteDataSet(strSql).Tables[0];
+ if (dt != null && dt.Rows.Count > 0)
+ {
+ bIfSuccess = true;
+ }
+ }
+ catch (Exception ex)
+ {
+ AppLog.Error(ex.Message);
+ }
+ return bIfSuccess;
+ }
+
+ ///
+ /// 检查MAC地址信息
+ ///
+ public bool CheckMacMessage(string strMac, string strUser)
+ {
+ bool bIfSuccess = false;
+ try
+ {
+ string strSql = string.Format("SELECT * FROM sys_mac WHERE mac='{0}' and username='{1}'", strMac, strUser);
+ DataTable dt = DamengHelper.ExecuteDataSet(strSql).Tables[0];
+ if (dt != null && dt.Rows.Count > 0)
+ {
+ bIfSuccess = true;
+ }
+ }
+ catch (Exception ex)
+ {
+ AppLog.Error(ex.Message);
+ }
+ return bIfSuccess;
+ }
+ }
+}
\ No newline at end of file
diff --git a/CnasSynchronusDAL/DAL/Helper/DamengHelper.cs b/CnasSynchronusDAL/DAL/Helper/DamengHelper.cs
index 564fee2..d73a58e 100644
--- a/CnasSynchronusDAL/DAL/Helper/DamengHelper.cs
+++ b/CnasSynchronusDAL/DAL/Helper/DamengHelper.cs
@@ -74,115 +74,10 @@ namespace CnasSynchronusDAL
}
///
- /// 对数据库执行增删改操作,返回受影响的行数。
+ /// 执行查询,返回DataSet
///
- /// 要执行的增删改的SQL语句
+ /// 要执行的查询SQL语句
///
- public static int ExecuteNonQuery(String sql, DmParameter[] cmdParams)
- {
- try
- {
- using (DmConnection connection = new DmConnection(mConnStr))
- {
- connection.Open();
- DmTransaction transaction = (DmTransaction)connection.BeginTransaction();
-
- using (DmCommand cmd = new DmCommand())
- {
- try
- {
- PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, cmdParams);
-
- int rows = cmd.ExecuteNonQuery();
- transaction.Commit();
-
- cmd.Parameters.Clear();
- return rows;
- }
- catch (DmException e1)
- {
- try
- {
- transaction.Rollback();
- }
- catch (Exception e2)
- {
- AppLog.Error(e2.Message);
- throw;
- }
- AppLog.Error(e1.Message);
- throw;
- }
- }
- }
- }
- catch (Exception e)
- {
- AppLog.Error(e.Message);
- throw;
- }
- }
-
- ///
- /// 对达梦数据库执行操作,返回第一行第一列数据
- ///
- ///
- ///
- public static int ExecuteScalar(String sql)
- {
- try
- {
- using (DmConnection connection = new DmConnection(mConnStr))
- {
- connection.Open();
- DmTransaction transaction = (DmTransaction)connection.BeginTransaction();
-
- using (DmCommand cmd = new DmCommand())
- {
- try
- {
- int line = 0;
-
- PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, null);
-
- String str = cmd.ExecuteScalar().ToString();
- transaction.Commit();
-
- line = Convert.ToInt32(str);
- cmd.Parameters.Clear();
-
- return line;
- }
- catch (DmException e1)
- {
- try
- {
- transaction.Rollback();
- }
- catch (Exception e2)
- {
- AppLog.Error(e2.Message);
- throw;
- }
-
- AppLog.Error(e1.Message);
- throw;
- }
- }
- }
- }
- catch (Exception e)
- {
- AppLog.Error(e.Message);
- throw;
- }
- }
-
- ///
- /// 查询返回DataSet
- ///
- ///
- ///
public static DataSet ExecuteDataSet(String sql)
{
DmConnection connection = new DmConnection(mConnStr);
@@ -204,7 +99,6 @@ namespace CnasSynchronusDAL
DataSet ds = new DataSet();
adapter.Fill(ds);
-
transaction.Commit();
cmd.Parameters.Clear();
@@ -221,7 +115,6 @@ namespace CnasSynchronusDAL
AppLog.Error(e2.Message);
throw;
}
-
AppLog.Error(e1.Message);
throw;
}
@@ -233,17 +126,10 @@ namespace CnasSynchronusDAL
AppLog.Error(e.Message);
throw;
}
- finally
- {
- if (connection != null)
- {
- connection.Close();
- }
- }
}
///
- /// 执行sql 返回一个DataTable
+ /// 执行查询,返回DataTable
///
///
///
@@ -256,27 +142,17 @@ namespace CnasSynchronusDAL
using (DmDataAdapter adapter = new DmDataAdapter(sqlText, mConnStr))
{
dt = new DataTable();
- adapter.SelectCommand.Parameters.AddRange(parameters);
adapter.Fill(dt);
- return dt;
}
}
catch (Exception ex)
{
AppLog.Error(ex.Message);
+ throw;
}
- return null;
+ return dt;
}
- ///
- /// 准备执行一个命令
- ///
- /// sql命令
- /// 数据库连接
- /// 数据库事务
- /// 命令类型例如 存储过程或者文本
- /// 命令文本,例如:Select * from Products
- /// 执行命令的参数
private static void PrepareCommand(DmCommand cmd, DmConnection conn, DmTransaction trans, CommandType cmdType, string cmdText, DmParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
@@ -322,5 +198,57 @@ namespace CnasSynchronusDAL
return bIfSuccess;
}
+
+ ///
+ /// 对达梦数据库执行增删改操作,返回受影响的行数。
+ ///
+ /// 要执行的增删改的SQL语句
+ /// SQL参数数组
+ /// 受影响的行数
+ public static int ExecuteNonQuery(String sql, DmParameter[] parameters)
+ {
+ DmConnection connection = new DmConnection(mConnStr);
+ try
+ {
+ using (connection)
+ {
+ connection.Open();
+ DmTransaction transaction = (DmTransaction)connection.BeginTransaction();
+
+ using (DmCommand cmd = new DmCommand())
+ {
+ try
+ {
+ PrepareCommand(cmd, connection, transaction, CommandType.Text, sql, parameters);
+
+ int rows = cmd.ExecuteNonQuery();
+ transaction.Commit();
+
+ cmd.Parameters.Clear();
+ return rows;
+ }
+ catch (DmException e1)
+ {
+ try
+ {
+ transaction.Rollback();
+ }
+ catch (Exception e2)
+ {
+ AppLog.Error(e2.Message);
+ throw;
+ }
+ AppLog.Error(e1.Message);
+ throw;
+ }
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ AppLog.Error(e.Message);
+ throw;
+ }
+ }
}
}
\ No newline at end of file
diff --git a/CnasSynchronusDAL/Service/DmDBService.cs b/CnasSynchronusDAL/Service/DmDBService.cs
new file mode 100644
index 0000000..ef74672
--- /dev/null
+++ b/CnasSynchronusDAL/Service/DmDBService.cs
@@ -0,0 +1,143 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Data.Entity;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using CnasSynchronousCommon;
+using CnasSynchronusIDAL;
+using CnasSynchrousModel;
+
+namespace CnasSynchronusDAL
+{
+ public class DmDBService : IDmDBService
+ {
+ public bool TestConnect(string strHost, string strName, string strUser, string strPwd, string strPort)
+ {
+ DmDAL mySQLBase = new DmDAL();
+ mySQLBase.CreateConnectString(strHost, strPort, strName, strUser, strPwd);
+ return mySQLBase.LinkCnasTest();
+ }
+
+ public Dictionary GetInstrumentData(DmOpenParams t)
+ {
+ DmDAL mySQL = new DmDAL();
+ mySQL.CreateConnectString(t.StrHost, t.StrPort, t.StrServer, t.StrUser, t.StrPwd);
+ return mySQL.GetAllTableNameAndStructure(t.StrServer);
+ }
+
+ public DataTable GetInstrumentDataByDate(DmOpenParams t, ConditionParams u)
+ {
+ DmDAL mySQL = new DmDAL();
+ mySQL.CreateConnectString(t.StrHost, t.StrPort, t.StrServer, t.StrUser, t.StrPwd);
+ return mySQL.GetDataByDateColumn(
+ t.StrServer,
+ t.autoSql.DmViewName,
+ t.autoSql.DmViewSql,
+ u.TableName,
+ u.DateColumn,
+ u.DateValue);
+ }
+
+ public DataTable GetInstrumentDataStruct(DmOpenParams t, ConditionParams u)
+ {
+ DmDAL mySQLBase = new DmDAL();
+ mySQLBase.CreateConnectString(t.StrHost, t.StrPort, t.StrServer, t.StrUser, t.StrPwd);
+ return mySQLBase.GetTableStruct(
+ u.TableName,
+ t.autoSql.DmViewName,
+ t.autoSql.DmViewSql
+ );
+ }
+
+ public DataTable GetAllCNASTablesName(DataBaseInfo dataBase)
+ {
+ DmDAL mySQLBase = new DmDAL();
+ mySQLBase.CreateConnectString(dataBase.DBHost, dataBase.DBPort, dataBase.DBName, dataBase.DBUser, dataBase.DBPwd);
+ return mySQLBase.GetTableNames(dataBase.DBName);
+ }
+
+ public DataTable GetCNASTablesStruct(string strTableName, DataBaseInfo dataBase)
+ {
+ DmDAL mySQLBase = new DmDAL();
+ mySQLBase.CreateConnectString(dataBase.DBHost, dataBase.DBPort, dataBase.DBName, dataBase.DBUser, dataBase.DBPwd);
+ return mySQLBase.GetTableStruct(strTableName,"","");
+ }
+
+ public int InsertDataToCNASTable(DataTable dt, DataBaseInfo dataBase, List syncParamasInfos, string strInstrumentColumn,List lstFixedValue = null)
+ {
+ DmDAL mySQLBase = new DmDAL();
+ mySQLBase.CreateConnectString(dataBase.DBHost, dataBase.DBPort, dataBase.DBName, dataBase.DBUser, dataBase.DBPwd);
+ return mySQLBase.InsertCnasData(dt, syncParamasInfos, lstFixedValue, strInstrumentColumn);
+ }
+
+ public DataTable GetCNASTableTypeLenth(string strTableName, DataBaseInfo dataBase)
+ {
+ DmDAL mySQLBase = new DmDAL();
+ mySQLBase.CreateConnectString(dataBase.DBHost, dataBase.DBPort, dataBase.DBName, dataBase.DBUser, dataBase.DBPwd);
+ return mySQLBase.GetTableTypeAndLenth(strTableName);
+ }
+
+ public DataTable GetLoginNameByPwd(DataBaseInfo dataBase, string strUserName, string strPwd)
+ {
+ DmDAL mySQLBase = new DmDAL();
+ mySQLBase.CreateConnectString(dataBase.DBHost, dataBase.DBPort, dataBase.DBName, dataBase.DBUser, dataBase.DBPwd);
+ strPwd = EncryptionOperation.GetMD5Hash(strPwd);
+ AppLog.Info(strPwd);
+ //return mySQLBase.GetLoginNameByPwd(strUserName, strPwd);
+ return new DataTable();
+ }
+
+ public bool CheckMacMessage(DataBaseInfo dataBase, string strMac)
+ {
+ DmDAL mySQLBase = new DmDAL();
+ mySQLBase.CreateConnectString(dataBase.DBHost, dataBase.DBPort, dataBase.DBName, dataBase.DBUser, dataBase.DBPwd);
+ return mySQLBase.CheckMacMessage(strMac);
+ }
+
+ public bool CheckMacMessage(string strConnectionString, string strMac)
+ {
+ DmDAL mySQLBase = new DmDAL();
+ mySQLBase.CreateConnectString(strConnectionString);
+ return mySQLBase.CheckMacMessage(strMac);
+ }
+
+ public string GetMaxTimeByTableName(DataBaseInfo dataBase, string strTableName, string strDateColumn, string strInstrumentColumn, string strInstrumentValue)
+ {
+ DmDAL mySQLBase = new DmDAL();
+ mySQLBase.CreateConnectString(dataBase.DBHost, dataBase.DBPort, dataBase.DBName, dataBase.DBUser, dataBase.DBPwd);
+ return mySQLBase.GetMaxTimeByTableName(strTableName, strDateColumn, strInstrumentColumn, strInstrumentValue);
+ }
+
+
+ ///
+ /// 获取某个表的数据
+ ///
+ ///
+ ///
+ ///
+ public DataTable GetTableData(DataBaseInfo dataBase, string strSql)
+ {
+ DmDAL mySQLBase = new DmDAL();
+ mySQLBase.CreateConnectString(dataBase.DBHost, dataBase.DBPort, dataBase.DBName, dataBase.DBUser, dataBase.DBPwd);
+
+ return mySQLBase.GetTableData(strSql);
+ }
+
+ ///
+ /// 插入某个表的数据
+ ///
+ ///
+ ///
+ ///
+ public bool InsertTableData(DataBaseInfo dataBase, string strSql)
+ {
+ DmDAL mySQLBase = new DmDAL();
+ mySQLBase.CreateConnectString(dataBase.DBHost, dataBase.DBPort, dataBase.DBName, dataBase.DBUser, dataBase.DBPwd);
+
+ return mySQLBase.InsertTableData(strSql);
+ }
+
+ }
+}
diff --git a/CnasSynchronusIDAL/IDBService.cs b/CnasSynchronusIDAL/IDBService.cs
index 00dd6c0..7ab8ebf 100644
--- a/CnasSynchronusIDAL/IDBService.cs
+++ b/CnasSynchronusIDAL/IDBService.cs
@@ -23,6 +23,11 @@ namespace CnasSynchronusIDAL
}
+ public interface IDmDBService : ITargetDataBaseService, ISourceDataBaseService
+ {
+
+ }
+
public interface IDB2DBService : ITargetDataBaseService
{
diff --git a/CnasSynchrousModel/CnasSynchrousModel.csproj b/CnasSynchrousModel/CnasSynchrousModel.csproj
index e1c7a95..2eeb5b8 100644
--- a/CnasSynchrousModel/CnasSynchrousModel.csproj
+++ b/CnasSynchrousModel/CnasSynchrousModel.csproj
@@ -50,6 +50,7 @@
+
diff --git a/CnasSynchrousModel/DmAutoSql.cs b/CnasSynchrousModel/DmAutoSql.cs
new file mode 100644
index 0000000..6b6f154
--- /dev/null
+++ b/CnasSynchrousModel/DmAutoSql.cs
@@ -0,0 +1,8 @@
+namespace CnasSynchrousModel
+{
+ public class DmAutoSql
+ {
+ public string DmViewName { get; set; }
+ public string DmViewSql { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/CnasSynchrousModel/DmFormatConfig.cs b/CnasSynchrousModel/DmFormatConfig.cs
new file mode 100644
index 0000000..2eda1d1
--- /dev/null
+++ b/CnasSynchrousModel/DmFormatConfig.cs
@@ -0,0 +1,13 @@
+namespace CnasSynchrousModel
+{
+ public class DmFormatConfig
+ {
+ public string DmFileDateColumnFormat { get; set; }
+ public DmAutoSql AutoSql { get; set; }
+
+ public DmFormatConfig()
+ {
+ AutoSql = new DmAutoSql();
+ }
+ }
+}
\ No newline at end of file
diff --git a/CnasSynchrousModel/DmOpenParams.cs b/CnasSynchrousModel/DmOpenParams.cs
new file mode 100644
index 0000000..9084d6f
--- /dev/null
+++ b/CnasSynchrousModel/DmOpenParams.cs
@@ -0,0 +1,12 @@
+namespace CnasSynchrousModel
+{
+ public class DmOpenParams
+ {
+ public string StrHost { get; set; }
+ public string StrServer { get; set; }
+ public string StrUser { get; set; }
+ public string StrPwd { get; set; }
+ public string StrPort { get; set; }
+ public DmAutoSql autoSql { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/CnasSynchrousModel/Param/DmOpenParams.cs b/CnasSynchrousModel/Param/DmOpenParams.cs
new file mode 100644
index 0000000..56dd103
--- /dev/null
+++ b/CnasSynchrousModel/Param/DmOpenParams.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CnasSynchrousModel
+{
+ public class DmOpenParams : OpenSourceParams
+ {
+ ///
+ /// 服务器IP
+ ///
+ public string StrHost { get; set; }
+
+ ///
+ /// 服务器实例名
+ ///
+ public string StrServer { get; set; }
+
+ ///
+ /// 端口
+ ///
+ public string StrPort { get; set; }
+
+ ///
+ /// 自定义查询
+ ///
+ public DmAutoSql autoSql { get; set; }
+ }
+}
diff --git a/dll/CNAS_DBSync.exe b/dll/CNAS_DBSync.exe
index f68060e..b25f3b4 100644
Binary files a/dll/CNAS_DBSync.exe and b/dll/CNAS_DBSync.exe differ
diff --git a/dll/CnasSynchronusClient.dll b/dll/CnasSynchronusClient.dll
index a5a14ca..b16467f 100644
Binary files a/dll/CnasSynchronusClient.dll and b/dll/CnasSynchronusClient.dll differ
diff --git a/dll/CnasSynchronusDAL.dll b/dll/CnasSynchronusDAL.dll
index 87eb511..16ba7e2 100644
Binary files a/dll/CnasSynchronusDAL.dll and b/dll/CnasSynchronusDAL.dll differ
diff --git a/dll/CnasSynchronusIDAL.dll b/dll/CnasSynchronusIDAL.dll
index 07068ad..c125f48 100644
Binary files a/dll/CnasSynchronusIDAL.dll and b/dll/CnasSynchronusIDAL.dll differ
diff --git a/dll/CnasSynchrousModel.dll b/dll/CnasSynchrousModel.dll
index 0bf5812..6401d90 100644
Binary files a/dll/CnasSynchrousModel.dll and b/dll/CnasSynchrousModel.dll differ