UA Library.CommandHandler直连第三方数据库
C:\Program Files\Siemens\SimaticIT\Unified\bin\Worker.exe.config
- using Dapper;
- using Dapper.Contrib;
- using Dapper.Contrib.Extensions;
- using Nancal.Model;
- using Newtonsoft.Json.Linq;
- using System;
- using System.Collections.Generic;
- using System.Configuration;
- using System.Data;
- using System.Data.SqlClient;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Xml.Linq;
-
- namespace Nancal.DBUtility
- {
-
- public class DBHelperMySQL
- {
- #region Property
-
- //private static readonly string ConnectionString = ConfigurationManager.AppSettings["BaseDb"];
- private static IDbConnection ReadingFunctionGetSQLDBConnection()
- {
- string key = "maindb";
- var xmlStr = File.ReadAllText(@"C:\Program Files\Siemens\SimaticIT\Unified\bin\Worker.exe.config");
- var str = XElement.Parse(xmlStr);
- var connStrings = str.Elements("connectionStrings");
- if (connStrings.Count() == 0)
- {
- throw new Exception($"未配置数据库链接字符串");
- }
- var db = connStrings.Elements().Where(t => t.Attribute("name").Value == key).FirstOrDefault();
- if (db == null)
- {
- throw new Exception($"未找到数据库链接字符串");
- }
- var url = db.Attribute("connectionString");
- if (url == null)
- {
- throw new Exception($"未找到数据库链接字符串");
- }
- var urlStr = url.Value;
- if (string.IsNullOrWhiteSpace(urlStr))
- {
- throw new Exception($"未找到数据库链接字符串");
- }
- 取接口地址
- //var api = platform.Query
().FirstOrDefault(t => t.Key == key); - //if (api == null || string.IsNullOrEmpty(api.ApiUrl))
- //{
- // throw new Exception($"地址{key}不存在");
- //}
- var connection = new SqlConnection(urlStr);
- if (connection.State == ConnectionState.Closed)
- {
- connection.Open();
- }
- return connection;
- }
-
- #endregion
-
- #region Method
-
- #region 按数据集方式获得数据
-
- ///
- /// 获得Table数据
- ///
- ///
- ///
- ///
- public static DataTable GetData_Table(string sql, out string msg)
- {
- DateTime beforDT = DateTime.Now;
- DataTable dt = new DataTable();
- try
- {
- #region 1.数据合法性校验
- msg = "获取数据成功";
- if (string.IsNullOrEmpty(sql))
- {
- msg = "Sql语句为空!";
- return dt;
- }
- #endregion
-
- IDbConnection connection = ReadingFunctionGetSQLDBConnection();
- var reader = connection.ExecuteReader(sql);
- dt.Load(reader);
- //LogProxy.Info("查询开始==========================================================");
- //LogProxy.Info("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Info("GetData_Table()请求SQL:" + sql);
- //LogProxy.Info("查询结束==========================================================");
- return dt;
- }
- catch (Exception ex)
- {
- msg = ex.Message;
- //LogProxy.Error("异常信息开始==========================================================");
- //LogProxy.Error("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Error("GetData_Table()请求SQL:" + sql);
- //LogProxy.Error("GetData_Table()异常信息:" + ex.Message);
- //LogProxy.Error("异常信息结束==========================================================");
- return dt;
- }
- }
-
- ///
- /// 获得数据集合
- ///
- ///
- ///
- ///
- public static DataSet GetDataSet(string sql, out string msg)
- {
- DateTime beforDT = DateTime.Now;
- try
- {
- using (IDbConnection connection = ReadingFunctionGetSQLDBConnection())
- {
- msg = "数据获取成功!";
- DataSet dataSet = new XDataSet();
- IDataReader reader = connection.ExecuteReader(sql);
- dataSet.Load(reader, LoadOption.OverwriteChanges, null, new DataTable[] { });
- //LogProxy.Info("查询开始==========================================================");
- //LogProxy.Info("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Info("GetDataSet()请求SQL:" + sql);
- //LogProxy.Info("查询结束==========================================================");
- return dataSet;
- }
- }
- catch (Exception ex)
- {
- msg = ex.Message;
- //LogProxy.Error("异常信息开始==========================================================");
- //LogProxy.Error("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Error("GetDataSet()请求SQL:" + sql);
- //LogProxy.Error("GetDataSet()异常信息:" + ex.Message);
- //LogProxy.Error("异常信息结束==========================================================");
- return null;
- }
- }
-
- #endregion
-
- #region 按实体类方式获得数据
-
- ///
- /// 通过主键获得实体
- ///
- ///
- ///
- ///
- ///
- public static T GetDataById<T>(string id, out string msg) where T : class
- {
- DateTime beforDT = DateTime.Now;
- try
- {
- #region 1.数据合法性校验
-
- msg = "获取数据成功";
- if (string.IsNullOrEmpty(id))
- {
- msg = "主键Id为空!";
- return default(T);
- }
- #endregion
-
- #region 2.获得数据
-
- IDbConnection connection = ReadingFunctionGetSQLDBConnection();
- T model = connection.Get
(id); - //LogProxy.Info("查询开始==========================================================");
- //LogProxy.Info("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Info("GetData
()请求条件:" + id); - //LogProxy.Info("查询结束==========================================================");
- return model;
-
- #endregion
- }
- catch (Exception ex)
- {
- msg = ex.Message;
- //LogProxy.Error("异常信息开始==========================================================");
- //LogProxy.Error("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Error("GetData
()请求条件:" + id); - //LogProxy.Error("GetData
()异常信息:" + ex.Message); - //LogProxy.Error("异常信息结束==========================================================");
- return default(T);
- }
- }
-
- ///
- /// 获得单条数据
- ///
- ///
- ///
- ///
- ///
- public static T GetData<T>(string sql, out string msg)
- {
- DateTime beforDT = DateTime.Now;
- try
- {
- #region 1.数据合法性校验
-
- msg = "获取数据成功";
- if (string.IsNullOrEmpty(sql))
- {
- msg = "Sql语句为空!";
- return default(T);
- }
- #endregion
-
- IDbConnection connection = ReadingFunctionGetSQLDBConnection();
- List
list = connection.Query(sql).AsList(); - //LogProxy.Info("查询开始==========================================================");
- //LogProxy.Info("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Info("GetData
()请求SQL:" + sql); - //LogProxy.Info("查询结束==========================================================");
- if (list.Count > 0)
- {
- return list[0];
- }
- else
- {
- return default(T);
- }
- }
- catch (Exception ex)
- {
- msg = ex.Message;
- //LogProxy.Error("异常信息开始==========================================================");
- //LogProxy.Error("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Error("GetData
()请求SQL:" + sql); - //LogProxy.Error("GetData
()异常信息:" + ex.Message); - //LogProxy.Error("异常信息结束==========================================================");
- return default(T);
- }
- }
-
- ///
- /// 获得多条数据
- ///
- ///
- ///
- ///
- ///
- public static List<T> GetDataList<T>(string sql, out string msg)
- {
- DateTime beforDT = DateTime.Now;
- try
- {
- #region 1.数据合法性校验
-
- msg = "获取数据成功";
- if (string.IsNullOrEmpty(sql))
- {
- msg = "Sql语句为空!";
- return null;
- }
- #endregion
-
- IDbConnection connection = ReadingFunctionGetSQLDBConnection();
- //LogProxy.Info("查询开始==========================================================");
- //LogProxy.Info("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Info("GetDataList
()请求SQL:" + sql); - //LogProxy.Info("查询结束==========================================================");
- return connection.Query
(sql).AsList(); - }
- catch (Exception ex)
- {
- msg = ex.Message;
- //LogProxy.Error("异常信息开始==========================================================");
- //LogProxy.Error("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Error("GetDataList
()请求SQL:" + sql); - //LogProxy.Error("GetDataList
()异常信息:" + ex.Message); - //LogProxy.Error("异常信息结束==========================================================");
- return null;
- }
- }
-
- ///
- /// 获得多条数据-带分页
- ///
- ///
- ///
- ///
- ///
- public static Tuple<List<T>, int> GetDataList_Page<T>(string sql, out string msg)
- {
- DateTime beforDT = DateTime.Now;
- try
- {
- using (IDbConnection connection = ReadingFunctionGetSQLDBConnection())
- {
- try
- {
- msg = "数据获取成功!";
- List
rows = null; - int totalCount = 0;
- using (var queryMulti = connection.QueryMultiple(sql))
- {
- if (!queryMulti.IsConsumed)
- {
- rows = queryMulti.Read
() as List; - totalCount = queryMulti.Read<int>().Single();
- }
- }
-
- //LogProxy.Info("查询开始==========================================================");
- //LogProxy.Info("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Info("GetDataList_Page
()请求SQL:" + sql); - //LogProxy.Info("查询结束==========================================================");
- return new Tuple
, int>(rows, totalCount);
- }
- catch (Exception ex)
- {
- msg = ex.Message;
- //LogProxy.Error(ex.Message);
- return null;
- }
- }
- }
- catch (Exception ex)
- {
- msg = ex.Message;
- //LogProxy.Error("异常信息开始==========================================================");
- //LogProxy.Error("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Error("GetDataList_Page
()请求SQL:" + sql); - //LogProxy.Error("GetDataList_Page
()异常信息:" + ex.Message); - //LogProxy.Error("异常信息结束==========================================================");
- return null;
- }
- }
-
- ///
- /// 获得数据列表-带分页
- ///
- ///
- ///
- ///
- ///
- ///
- public static Tuple<List<T>, int> GetDataList_Page<T>(string sql, string countSql, out string msg)
- {
- DateTime beforDT = DateTime.Now;
- try
- {
- using (IDbConnection connection = ReadingFunctionGetSQLDBConnection())
- {
- connection.Open();
- IDbTransaction transaction = connection.BeginTransaction();
- try
- {
- msg = "数据获取成功!";
- var rows = connection.Query
(sql, transaction) as List; - var totalCount = connection.Query<int>(countSql, transaction).Single();
- transaction.Commit();
- //LogProxy.Info("查询开始==========================================================");
- //LogProxy.Info("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Info("GetDataList_Page
()请求SQL:" + sql); - //LogProxy.Info("查询结束==========================================================");
- return new Tuple
, int>(rows, totalCount);
- }
- catch (Exception ex)
- {
- msg = ex.Message;
- //LogProxy.Error(ex.Message);
- transaction.Rollback();
- return null;
- }
- }
- }
- catch (Exception ex)
- {
- msg = ex.Message;
- //LogProxy.Error("异常信息开始==========================================================");
- //LogProxy.Error("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Error("GetDataList_Page
()请求SQL:" + sql); - //LogProxy.Error("GetDataList_Page
()异常信息:" + ex.Message); - //LogProxy.Error("异常信息结束==========================================================");
- return null;
- }
- }
-
- #endregion
-
- ///
- /// 采用事务执行SQL语句
- ///
- ///
- ///
- public static bool TransactionExcute(List<string> lsSqls, out string msg)
- {
- bool resultObj = false;
- msg = string.Empty;
-
- try
- {
- using (IDbConnection connection = ReadingFunctionGetSQLDBConnection())
- {
- connection.Open();
- IDbTransaction transaction = connection.BeginTransaction();
- try
- {
- foreach (string sql in lsSqls)
- {
- connection.Execute(sql, null, transaction);
- }
- transaction.Commit();
- resultObj = true;
- }
- catch (Exception ex)
- {
- msg = ex.Message;
- //LogProxy.Error(ex.Message);
- transaction.Rollback();
- }
- }
- }
- catch (Exception ex)
- {
- msg = ex.Message;
- //LogProxy.Error(ex.Message);
-
- }
- return resultObj;
- }
- #region 按SQL语句执行数据
-
- ///
- /// 带SQL语句执行数据(支持Insert、Update、Delete三种数据)
- ///
- ///
- ///
- ///
- public static int Execute(string sql, out string msg)
- {
- DateTime beforDT = DateTime.Now;
- int result = 0;
- msg = "";
- try
- {
- using (IDbConnection connection = ReadingFunctionGetSQLDBConnection())
- {
- result = connection.Execute(sql);
- }
- //LogProxy.Info("查询开始==========================================================");
- //LogProxy.Info("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Info("Execute(string sql)请求SQL:" + sql);
-
- //LogProxy.Info("查询结束==========================================================");
- }
- catch (Exception ex)
- {
- msg = ex.Message;
- //LogProxy.Error("异常信息开始==========================================================");
- //LogProxy.Error("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Error("Execute(string sql)请求SQL:" + sql);
- //LogProxy.Error("Execute(string sql)异常信息:" + ex.Message);
- //LogProxy.Error("异常信息结束==========================================================");
- }
-
- return result;
- }
-
- ///
- /// 带参数SQL语句执行数据(支持insert、Update、Delete三种数据)
- ///
- ///
- ///
- ///
- ///
- public static int Execute<T>(string sql, T model, out string msg)
- {
- DateTime beforDT = DateTime.Now;
- int result = 0;
- msg = "";
- try
- {
- using (IDbConnection connection = ReadingFunctionGetSQLDBConnection())
- {
- result = connection.Execute(sql, model);
- }
- //LogProxy.Info("查询开始==========================================================");
- //LogProxy.Info("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Info("Execute
(string sql, T model)请求SQL:" + sql); - //LogProxy.Info("Execute
(string sql, T model)参数model:" + Common.Helpers.JsonHelper.ObjectToJson(model)); - //LogProxy.Info("查询结束==========================================================");
- }
- catch (Exception ex)
- {
- msg = ex.Message;
- //LogProxy.Error("异常信息开始==========================================================");
- //LogProxy.Error("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Error("Execute
(string sql, T model)请求SQL:" + sql); - //LogProxy.Error("Execute
(string sql, T model)参数model:" + Common.Helpers.JsonHelper.ObjectToJson(model)); - //LogProxy.Error("Execute
(string sql, T model)异常信息:" + ex.Message); - //LogProxy.Error("异常信息结束==========================================================");
- }
-
- return result;
- }
-
- #endregion
-
- #region 按实体类执行数据
-
- ///
- /// 直接通过实体类Insert
- ///
- ///
- ///
- ///
- public static long Insert_Model<T>(T model, out string msg) where T : class
- {
-
- msg = string.Empty;
- DateTime beforDT = DateTime.Now;
- long result = 0;
- try
- {
- using (IDbConnection connection = ReadingFunctionGetSQLDBConnection())
- {
- result = connection.Insert
(model); - }
- //LogProxy.Info("查询开始==========================================================");
- //LogProxy.Info("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Info("Insert_Model
()参数model:" + Common.Helpers.JsonHelper.ObjectToJson(model)); - //LogProxy.Info("查询结束==========================================================");
- }
- catch (Exception ex)
- {
- msg = ex.Message;
- //LogProxy.Error("异常信息开始==========================================================");
- //LogProxy.Error("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Error("Insert_Model
()参数model:" + Common.Helpers.JsonHelper.ObjectToJson(model)); - //LogProxy.Error("Insert_Model
()异常信息:" + ex.Message); - //LogProxy.Error("异常信息结束==========================================================");
- }
-
- return result;
- }
-
- ///
- /// 通过实体类更新
- ///
- ///
- ///
- ///
- ///
- public static bool Update_Model<T>(T model, out string msg) where T : class
- {
- msg = string.Empty;
- DateTime beforDT = DateTime.Now;
- bool isSuccess = false;
- try
- {
- using (IDbConnection connection = ReadingFunctionGetSQLDBConnection())
- {
- isSuccess = connection.Update
(model); - }
- //LogProxy.Info("更新开始==========================================================");
- //LogProxy.Info("更新时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Info("Update_Model
()参数model:" + Common.Helpers.JsonHelper.ObjectToJson(model)); - //LogProxy.Info("更新结束==========================================================");
- }
- catch (Exception ex)
- {
- msg = ex.Message;
- //LogProxy.Error("异常信息开始==========================================================");
- //LogProxy.Error("更新时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Error("Update_Model
()参数model:" + Common.Helpers.JsonHelper.ObjectToJson(model)); - //LogProxy.Error("Update_Model
()异常信息:" + ex.Message); - //LogProxy.Error("异常信息结束==========================================================");
- }
-
- return isSuccess;
- }
-
- #endregion
-
- #region 单列值
-
- ///
- /// 获得单列值
- ///
- ///
- ///
- public static JObject GetSingleColValue(string sql)
- {
- DateTime beforDT = DateTime.Now;
- JObject resultObj = new JObject();
- resultObj["flag"] = false;//接口是否正确
- resultObj["msg"] = string.Empty;//错误信息
-
- try
- {
- #region 1.数据合法性校验
-
- if (string.IsNullOrEmpty(sql))
- {
- resultObj["msg"] = "Sql语句为空!";
- return resultObj;
- }
- #endregion
-
- IDbConnection connection = ReadingFunctionGetSQLDBConnection();
- var reader = connection.ExecuteScalar(sql);
- if (reader == null)
- {
- resultObj["flag"] = true;
- resultObj["singlecolvalue"] = string.Empty;
- }
- else
- {
- string singleColValue = reader.ToString();
- resultObj["flag"] = true;
- resultObj["singlecolvalue"] = singleColValue;
- }
- return resultObj;
- }
- catch (Exception ex)
- {
- resultObj["flag"] = false;
- resultObj["msg"] = ex.Message;
- //LogProxy.Error("异常信息开始==========================================================");
- //LogProxy.Error("查询时间:" + DateTime.Now.Subtract(beforDT).TotalMilliseconds.ToString() + " 毫秒");
- //LogProxy.Error("GetComputeValue()请求SQL:" + sql);
- //LogProxy.Error("GetComputeValue()异常信息:" + ex.Message);
- //LogProxy.Error("异常信息结束==========================================================");
- return resultObj;
- }
- }
-
- #endregion
-
- #region 事务执行
-
- ///
- /// 采用事务执行SQL语句
- ///
- ///
- ///
- public static JObject TransactionExcute(List<string> lsSqls)
- {
- JObject resultObj = new JObject();
- resultObj["flag"] = false;
- resultObj["msg"] = string.Empty;
-
- try
- {
- using (IDbConnection connection = ReadingFunctionGetSQLDBConnection())
- {
- connection.Open();
- IDbTransaction transaction = connection.BeginTransaction();
- try
- {
- foreach (string sql in lsSqls)
- {
- connection.Execute(sql, null, transaction);
- }
- transaction.Commit();
- resultObj["flag"] = true;
- }
- catch (Exception ex)
- {
- resultObj["msg"] = ex.Message;
- //LogProxy.Error(ex.Message);
- transaction.Rollback();
- }
- }
- }
- catch (Exception ex)
- {
- resultObj["msg"] = ex.Message;
- //LogProxy.Error(ex.Message);
-
- }
- return resultObj;
- }
-
- ///
- /// 带参数SQL语句执行数据(支持insert、Update、Delete三种数据)
- ///
- ///
- ///
- ///
- public static JObject TransactionExcuteModel(List
agencyModels ) - {
- JObject resultObj = new JObject();
- resultObj["flag"] = false;
- resultObj["msg"] = string.Empty;
-
- try
- {
- using (IDbConnection connection = ReadingFunctionGetSQLDBConnection())
- {
- connection.Open();
- IDbTransaction transaction = connection.BeginTransaction();
- try
- {
- foreach (AgencyModel agencyModel in agencyModels)
- {
- connection.Execute(agencyModel.sql, agencyModel.model, transaction);
- }
- transaction.Commit();
- resultObj["flag"] = true;
- }
- catch (Exception ex)
- {
- resultObj["msg"] = ex.Message;
- //LogProxy.Error(ex.Message);
- transaction.Rollback();
- }
- }
- }
- catch (Exception ex)
- {
- resultObj["msg"] = ex.Message;
- //LogProxy.Error(ex.Message);
-
- }
- return resultObj;
- }
-
- #endregion
-
- #endregion
- }
-
- }
XDataSet.cs
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
-
- namespace Nancal.DBUtility
- {
- public class XDataSet : DataSet
- {
- public override void Load(IDataReader reader, LoadOption loadOption, FillErrorEventHandler handler, params DataTable[] tables)
- {
- XLoadAdapter adapter = new XLoadAdapter
- {
- FillLoadOption = loadOption,
- MissingSchemaAction = MissingSchemaAction.AddWithKey
- };
- if (handler != null)
- {
- adapter.FillError += handler;
- }
- adapter.FillFromReader(this, reader, 0, 0);
- if (!reader.IsClosed && !reader.NextResult())
- {
- reader.Close();
- }
- }
- }
- }
XLoadAdapter.cs
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Data.Common;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
-
- namespace Nancal.DBUtility
- {
- public class XLoadAdapter: DataAdapter
- {
- public XLoadAdapter()
- {
- }
-
- public int FillFromReader(DataSet ds, IDataReader dataReader, int startRecord, int maxRecords)
- {
- return this.Fill(ds, "Table", dataReader, startRecord, maxRecords);
- }
- }
- }