|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Data;
- using System.Data.OleDb;
- using CnasSynchronousCommon;
- using CnasSynchrousModel;
-
- namespace CnasSynchronusDAL
- {
- public class SQLDB2DAL
- {
-
- public void CreateConnectString(string strHost, string strName, string strUser, string strPwd)
- {
- SQLDB2Helper.createConnectString(strHost, strName, strUser, strPwd);
- }
-
- //获取所有表单名称
- public DataTable GetTableNames(string strUser)
- {
- DataTable dt = new DataTable();
- string strSql = string.Format("SELECT TABNAME FROM SYSCAT.TABLES Where TABSCHEMA = '{0}'",strUser);
- try
- {
- dt= SQLDB2Helper.getDB2Table(strSql);
- }
- catch (Exception ex)
- {
- AppLog.Error(ex.Message);
- }
- return dt;
- }
-
- /// <summary>
- /// 获取某表的表结构
- /// </summary>
- /// <param name="strTableName"></param>
- /// <returns></returns>
- public DataTable GetTableStruct(string strTableName)
- {
- DataTable dt = new DataTable();
- string strSql = string.Format("SELECT * FROM {0} Where 1=0", strTableName);
- try
- {
- dt = SQLDB2Helper.getDB2Table(strSql);
- }
- catch (Exception ex)
- {
- AppLog.Error(ex.Message);
- }
- return dt;
- }
-
-
- /// <summary>
- /// 逐行批量插入数据
- /// </summary>
- /// <param name="dt"></param>
- /// <returns></returns>
- public int InsertCnasData(DataTable dt, List<SyncParamasInfo> syncParamasInfos, string strInsturmentColumn,List<CnasConditionMapValue> lstFixedValue)
- {
- 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<string> lstKeyColumns = new List<string>();
- foreach (var item in query)
- {
- lstKeyColumns.Add(item.TargetField);
- }
- //构建SQL语句
- string strSql_part1 = "";
- string strSql_part2 = "";
- List<string> lstColumnName = new List<string>();
- foreach (var item in syncParamasInfos)
- {
- strSql_part1 += item.TargetField + ",";
- strSql_part2 += "?,";
- lstColumnName.Add(item.TargetField);
-
- //如果映射列中包含固定值列,则不用再继续处理
- if (lstFixedValue != null)
- {
- var fixedvalue = lstFixedValue.Where(x => x.ColumnName == item.TargetField && x.TableName == item.TargetTable).ToList<CnasConditionMapValue>();
- if (fixedvalue.Count() > 0)
- {
- foreach (var cnasfield in fixedvalue)
- lstFixedValue.Remove(cnasfield);
- }
- }
- }
- //如果映射列中不包含固定列,则需要将这些列添加到SQL语句中
- if (lstFixedValue != null)
- {
- foreach (var cnasfield in lstFixedValue)
- {
- if (cnasfield.TableName != syncParamasInfos[0].TargetTable) continue;
-
- strSql_part1 += cnasfield.ColumnName + ",";
- strSql_part2 += string.Format("@{0},", cnasfield.ColumnName);
- lstColumnName.Add(cnasfield.ColumnName);
- }
- }
- //增加仪器编号数据
- if (!lstColumnName.Contains(strInsturmentColumn))
- {
- strSql_part1 += strInsturmentColumn + ",";
- strSql_part2 += string.Format("@{0},", strInsturmentColumn);
-
- lstColumnName.Add(strInsturmentColumn);
- }
-
- string strSql = 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));
-
- foreach (DataRow dr in dt.Rows)
- {
- //插入时发现已经在数据库中存在该值,则不进行进行插入
- if (ExistSingleCnasData(lstKeyColumns, syncParamasInfos[0].TargetTable, dr))
- {
- iReturn = 1;
- continue;
- }
- OleDbParameter[] parameters = new OleDbParameter[syncParamasInfos.Count];
- int i = 0;
- foreach (var item in lstColumnName)
- {
- parameters[i++] = new OleDbParameter(item, dr[item]);
- }
-
- //执行SQL语句
- iReturn += SQLDB2Helper.ExequeryDB2Table(strSql, parameters);
-
- }
- }
- catch (Exception ex)
- {
- //此处添加错误日志
- AppLog.Error(ex.Message);
- }
-
- return iReturn;
- }
-
- public bool LinkCnasTest()
- {
- return SQLDB2Helper.TestCnasLink();
- }
-
- internal DataTable GetTableTypeAndLenth(string strUserId,string strTableName)
- {
- DataTable dt = new DataTable();
- //string strSql = string.Format("select COLUMN_NAME AS 'ColumnName',IS_NULLABLE AS 'IsNullable',DATA_TYPE AS 'DataType',CHARACTER_MAXIMUM_LENGTH AS 'CharMaxLenth',CHARACTER_OCTET_LENGTH AS 'CharOcterLenth',NUMERIC_PRECISION AS 'NumericPrecision',NUMERIC_SCALE AS 'NumericScale' FROM information_schema.COLUMNS WHERE TABLE_NAME LIKE '{0}'", strTableName);
- string strSql = string.Format("SELECT NAME AS ColumnName,NULLS AS IsNullable,COLTYPE AS DataType,LENGTH AS CharMaxLenth,LONGLENGTH AS CharOcterLenth,LENGTH AS NumericPrecision,SCALE AS NumericScale FROM SYSIBM.SYSCOLUMNS WHERE TBCREATOR = '{0}' AND TBNAME = '{1}'", strUserId, strTableName);
- try
- {
- dt = SQLDB2Helper.getDB2Table(strSql);
- }
- catch (Exception ex)
- {
- AppLog.Error(ex.Message);
- }
- return dt;
- }
- public string GetMaxTimeByTableName(string strTableName, string strDateColumn, string strInstrumentColumn, string strInstrumentValue)
- {
- //string strSql = string.Format("SELECT max(to_date({0},'yyyy-mm-dd hh24:mi:ss')) FROM {1} ", strDateColumn, strTableName);
- string strReturnTime = "";
- //因为数据库用varchar存储日期字段,从而格式不固定,需要使用多种格式读取
- try
- {
- string strSql_1 = string.Format("SELECT max(to_date({0},'yyyy-mm-dd hh24:mi:ss')) FROM {1} where {2}='{3}'", strDateColumn, strTableName,strInstrumentColumn,strInstrumentValue);
- string strSql_2 = string.Format("SELECT max(to_date({0},'yyyy/mm/dd hh24:mi:ss')) FROM {1} where {2}='{3}'", strDateColumn, strTableName, strInstrumentColumn, strInstrumentValue);
-
- string strDateTime_1 = GetMaxTimeByTableName(strSql_1);
- string strDateTime_2 = GetMaxTimeByTableName(strSql_2);
-
- List<DateTime> lstTime = new List<DateTime>();
- DateTime dateTime_1 = DateTime.Now;
- DateTime dateTime_2 = DateTime.Now;
- if (DateTime.TryParse(strDateTime_1, out dateTime_1))
- {
- lstTime.Add(dateTime_1);
- }
- if (DateTime.TryParse(strDateTime_2, out dateTime_2))
- {
- if (!lstTime.Contains(dateTime_2))
- lstTime.Add(dateTime_2);
- }
-
- if (lstTime.Count > 0)
- {
- strReturnTime = lstTime.Max<DateTime>().ToString();
- }
- }
- catch (Exception ex)
- {
- AppLog.Error(ex.Message);
- }
- return strReturnTime;
- }
- public string GetMaxTimeByTableName(string strSql)
- {
- string strDateTime = "";
- try
- {
- DataTable dt = SQLDB2Helper.getDB2Table(strSql);
-
- if (dt != null && dt.Rows.Count == 1)
- {
- strDateTime = dt.Rows[0][0].ToString();
- }
- }
- catch (Exception ex)
- {
- AppLog.Error(ex.Message);
- }
- return strDateTime;
- }
-
- internal DataTable GetLoginNameByPwd(string strUserName, string strPwd)
- {
- DataTable dt = new DataTable();
- //SELECT max(to_date(TEST_DATE,'yyyy-mm-dd hh24:mi:ss')) FROM ASHEXAMINERECORD
- string strSql = string.Format("select * FROM user WHERE username='{0}' and password='{1}'", strUserName, strPwd);
- try
- {
- dt = SQLDB2Helper.getDB2Table(strSql);
- }
- catch (Exception ex)
- {
- AppLog.Error(ex.Message);
- }
- return dt;
- }
-
- internal bool GetLoginNameByPwd(string strMac)
- {
- bool bIfChecked = false;
- string strSql = string.Format("select * FROM macaddress WHERE MAC_ADDRESS='{0}'", strMac);
- try
- {
- DataTable dt = SQLDB2Helper.getDB2Table(strSql);
- if (dt != null && dt.Rows.Count > 0)
- {
- bIfChecked = true;
- }
- }
- catch (Exception ex)
- {
- AppLog.Error(ex.Message);
- }
- return bIfChecked;
- }
-
- private bool ExistSingleCnasData(List<string> lstPrimaryColumn, string strTableName,DataRow dr)
- {
- bool bIfHaveValue = false;
- string strsql_partial = "";
- string strSql = "";
- foreach (var item in lstPrimaryColumn)
- {
- if(dr.Table.Columns.Contains(item.ToString()))
- strsql_partial += $"{item.ToString()}='{dr[item.ToString()].ToString()}' and ";
- }
- if(strsql_partial.Length>3)
- strSql = $"select * from {strTableName} where {strsql_partial.Substring(0, strsql_partial.Length - 4)}";
-
- if (strSql != "")
- {
- DataTable dt = SQLDB2Helper.getDB2Table(strSql);
- if (dt != null && dt.Rows.Count > 0)
- bIfHaveValue = true;
- }
- return bIfHaveValue;
- }
- }
- }
|