180 lines
6.4 KiB
C#
180 lines
6.4 KiB
C#
|
|
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
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 日志库
|
|||
|
|
/// </summary>
|
|||
|
|
LogDB,
|
|||
|
|
/// <summary>
|
|||
|
|
/// 主要数据库
|
|||
|
|
/// </summary>
|
|||
|
|
BLV_RCU_DB,
|
|||
|
|
/// <summary>
|
|||
|
|
/// DEBUG 巫工 调试信息数据库
|
|||
|
|
/// </summary>
|
|||
|
|
DEBUGGER_DB
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
private DBSel DBType { get; set; }
|
|||
|
|
|
|||
|
|
private string connectionString { get; set; }
|
|||
|
|
/// <summary>
|
|||
|
|
/// 执行SQL语句,返回影响的记录数
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="SQLString">SQL语句</param>
|
|||
|
|
/// <returns>影响的记录数</returns>
|
|||
|
|
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);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 执行SQL语句,返回影响的记录数
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="SQLString">SQL语句</param>
|
|||
|
|
/// <returns>影响的记录数</returns>
|
|||
|
|
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;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// DataTable
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="sql"></param>
|
|||
|
|
/// <param name="par"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
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<MySqlParameter>(par));
|
|||
|
|
else
|
|||
|
|
return SQLSERVER_Helper.GetDatatable(this.connectionString, sql, par);
|
|||
|
|
}
|
|||
|
|
finally
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 分页查询
|
|||
|
|
/// </summary>
|
|||
|
|
/// <typeparam name="T"></typeparam>
|
|||
|
|
/// <param name="keys"></param>
|
|||
|
|
/// <param name="TableName"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
|
|||
|
|
public List<T> GetData<T>(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<SqlParameter> sqlparment = new List<SqlParameter>();
|
|||
|
|
|
|||
|
|
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<T>(ExecuteTable(sql, sqlparment.ToArray()));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|