using Newtonsoft.Json; using Org.BouncyCastle.Asn1.X509; using SqlSugar; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Linq.Expressions; namespace HH.WCS.JiaTong.util { //https://www.donet5.com/Home/Doc public class SqlHelper where T : class, new() { public bool ExecuteSql(string sql) { try { var code = GetInstance().Ado.ExecuteCommand(sql); return code > 1; } catch (Exception ex) { return false; } } public bool Update(T model, string[] cols) { var db = GetInstance(); return db.Updateable(model).UpdateColumns(cols).ExecuteCommand() > 0; } public List GetList(Expression> where = null) { var db = GetInstance(); if (where == null) { return db.Queryable().ToList(); } else { return db.Queryable().Where(where).ToList(); } } public T Get(Expression> where, Expression> order, bool asc = false) { SqlSugarClient db = GetInstance(); if (order == null) { return db.Queryable().Where(where).Single(); } else { return db.Queryable().Where(where).OrderBy(order, asc ? OrderByType.Asc : OrderByType.Desc).First(); } } public T Get(Expression> where, Expression> orderBy = null) { try { var db = GetInstance(); T model = null; if (orderBy != null) { model = db.Queryable().Where(where).OrderBy(orderBy, OrderByType.Desc).First();//查询表的所有 } else { model = db.Queryable().Where(where).First(); } return model; } catch (Exception ex) { Console.WriteLine(ex.Message); return default(T); } } public bool Update(T model) { var db = GetInstance(); return db.Updateable(model).ExecuteCommand() > 0; } public bool Insert(T model) { try { var db = GetInstance(); return db.Insertable(model).ExecuteCommand() > 0; } catch (Exception ex) { return false; } } //删除指定条件数据 public bool Deleteable(Expression> where) { try { var db = GetInstance(); return db.Deleteable().Where(where).ExecuteCommand() > 0; } catch (Exception ex) { return false; } } /// /// 如果用Oracle数据需要包Oracle.ManagedDataAccess/21.15.0,环境netframework 4.62,太新了4.8有的服务器安装不上去 /// /// /// public SqlSugarClient GetInstance(string url = "") { //创建数据库对象 SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = string.IsNullOrEmpty(url) ? Settings.SqlServer : url, //ConnectionString = @"Data Source=192.168.1.198\sql2008;Initial Catalog=OIMobox;User ID=sa;Password=sa@2015", // DbType = DbType.SqlServer, // ConnectionString = @"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.144)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=JTMobox)));User Id=system;Password=Hh123321;", DbType = DbType.Oracle, IsAutoCloseConnection = true, InitKeyType = InitKeyType.Attribute//从特性读取主键自增信息 }); // //db.MappingTables.Add("",""); //监控所有超过1秒的Sql db.Aop.OnLogExecuted = (sql, p) => { //执行时间超过1秒 if (db.Ado.SqlExecutionTime.TotalSeconds > 1) { // Console.WriteLine(sql + "\r\n" + db.Utilities.SerializeObject(p.ToDictionary(it => it.ParameterName, it => it.Value))); //代码CS文件名 var fileName = db.Ado.SqlStackTrace.FirstFileName; //代码行数 var fileLine = db.Ado.SqlStackTrace.FirstLine; //方法名 var FirstMethodName = db.Ado.SqlStackTrace.FirstMethodName; //db.Ado.SqlStackTrace.MyStackTraceList[1].xxx 获取上层方法的信息 } //相当于EF的 PrintToMiniProfiler }; db.Aop.DataExecuted = (value, entity) => { entity.EntityColumnInfos.ToList().ForEach(a => { var pvalue = entity.GetValue(a.PropertyName); if (pvalue != null && pvalue.GetType() == typeof(String)) { entity.SetValue(a.PropertyName, pvalue.ToString().Trim()); } }); }; //order数据库去掉查询必须带Trim条件 db.Aop.OnExecutingChangeSql = (sql, pars) => //可以修改SQL和参数的值 { if (db.CurrentConnectionConfig.DbType == DbType.Oracle && pars.Any()) { var input = sql; Stack stack = new Stack(); List results = new List(); for (int i = 0; i < input.Length; i++) { if (input[i] == '(') { stack.Push(i); } else if (input[i] == ')') { if (stack.Count > 0) { int start = stack.Pop(); string content = input.Substring(start + 1, i - start - 1); results.Add(content); } } } foreach (var p in pars) { if (p.DbType == System.Data.DbType.String) { var result = results.Find(x => x.Contains(p.ParameterName) && x.Count(c => c == '=') == 1); if (result != null && !result.Contains("trim(")) { string[] parts = result.Split('='); if (parts.Length > 1) { string Field = parts[0]; sql = sql.Replace(result, $"trim({Field}) = {p.ParameterName}"); } } } } } return new KeyValuePair(sql, pars); }; return db; } } }