using Models; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using UtilsSharp; using Newtonsoft.Json; using System.Data.Common; using System.Diagnostics; using COMMON; using MySql.Data.MySqlClient; namespace DB_Server { public class DbHelperSQL { public DbHelperSQL(DBSel type) { DBType = type; connectionString = type == DBSel.BLV_RCU_DB ? ConfigEntity.Instance.Connection : (type == DBSel.DEBUGGER_DB ? ConfigEntity.Instance.DEBUGGER_DB : ConfigEntity.Instance.Connection_log); } public enum DBSel { /// /// 日志库 /// LogDB, /// /// 主要数据库 /// BLV_RCU_DB, /// /// DEBUG 巫工 调试信息数据库 /// DEBUGGER_DB } private DBSel DBType { get; set; } private string connectionString { get; set; } /// /// 执行SQL语句,返回影响的记录数 /// /// SQL语句 /// 影响的记录数 public int ExecuteSql(string SQLString) { if (ConfigEntity.Instance.DBTYPE == 1 || DBType == DBSel.DEBUGGER_DB) return SQLSERVER_Helper.ExecuteSql(connectionString,SQLString); else return MYSQL_Helper.ExecuteSql(connectionString, SQLString); } /// /// 执行SQL语句,返回影响的记录数 /// /// SQL语句 /// 影响的记录数 public int ExecuteSql(string SQLString, params SqlParameter[] cmdParms) { using (SqlConnection connection = new SqlConnection(connectionString)) { using (SqlCommand cmd = new SqlCommand(SQLString, connection)) { try { cmd.Parameters.Add(cmdParms); connection.Open(); int rows = cmd.ExecuteNonQuery(); return rows; } catch (SqlException e) { connection.Close(); throw e; } } } } /// /// DataTable /// /// /// /// public DataTable ExecuteTable(string sql, params SqlParameter[] par) { try { if (ConfigEntity.Instance.DBTYPE == 2 && DBType != DBSel.DEBUGGER_DB) return MYSQL_Helper.GetDatatable(this.connectionString, sql, DBLib.ConvertParameters(par)); else return SQLSERVER_Helper.GetDatatable(this.connectionString, sql, par); } finally { } } /// /// 分页查询 /// /// /// /// /// public List GetData(string[,] keys, string TableName, int page, int length, out int COUNT, out int filtcount, string bysql = "",int sumhc = 1) where T : new() { COUNT = 0; filtcount = 0; string sql = string.Empty; List sqlparment = new List(); var RDkey_filtcount = TableName; if (keys != null) { for (int i = 0; i < keys.GetLength(0); i++) { var data = keys[i, 2]; var key = keys[i, 0]; var moh = keys[i, 1]; var BL = keys[i, 3]; if (!string.IsNullOrEmpty(data)) { RDkey_filtcount += key; RDkey_filtcount += moh; RDkey_filtcount += BL; RDkey_filtcount += data; if (sql != string.Empty) { sql += " AND "; } sql += $"({key} {moh} @{BL})"; sqlparment.Add(new SqlParameter { Value = moh.ToUpper().Trim() == "LIKE" ? $"%{data}%" : data, ParameterName = $"@{BL}" }); } } } string sqlCONE = sql; if (ConfigEntity.Instance.DBTYPE == 1 || DBType == DBSel.DEBUGGER_DB) { //这种SQLSERVER sql 速度快 COUNT = XC_Redis.Redis.GET(RDkey_filtcount, () => { return int.Parse(ExecuteTable($"SELECT MAX(b.rows) FROM sys.sysobjects AS a INNER JOIN sys.sysindexes AS b ON a.id = b.id WHERE(a.xtype = 'u') and a.[NAME] = '{TableName}' ").Rows[0][0].ToString()); }, 2); sql = @$" SELECT TOP {length} * FROM ( SELECT ROW_NUMBER() OVER({bysql}) AS RowNumber, * FROM [{TableName}] {(sql != string.Empty ? $" where {sql} " : "")} ) as A WHERE RowNumber > {length * (page - 1)}"; } else { COUNT = XC_Redis.Redis.GET(RDkey_filtcount, () => { return int.Parse(ExecuteTable($"SELECT count(1) FROM {TableName} ").Rows[0][0].ToString()); }, 2); sql = $"SELECT * FROM {TableName} {(sql != string.Empty ? $" where {sql} " : "")} {bysql} limit {length * (page - 1)},{length}"; } // 如果没有过滤就 会读取表的数量 不会查询 filtcount = XC_Redis.Redis.GET(RDkey_filtcount, () => { return int.Parse(ExecuteTable($"select COUNT(1) from {TableName} {(sqlCONE != string.Empty ? $" where {sqlCONE} " : "")}", (SqlParameter[])sqlparment.ToArray().Clone()).Rows[0][0].ToString()); }, sumhc); return DataTableHelper.ToEntities(ExecuteTable(sql, sqlparment.ToArray())); } } }