using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using Tiobon.Core.Common.DB.Dapper.Const; using Tiobon.Core.Common.DB.Dapper.DBManager; using Tiobon.Core.Common.DB.Dapper.Enums; namespace Tiobon.Core.Common.DB.Dapper; public class DbAccess { public static ISqlDapper Instance { get { return DBServerProvider.SqlDapper; } } public static bool MySql { get { bool result = false; if (DBType.Name == DbCurrentType.MySql.ToString()) { result = true; } return result; } } #region 获取SQL插入语句 /// /// 获取SQL插入语句 /// /// 表名 /// 列名 /// 列值 /// SQL插入语句 public StringBuilder GetInsertSql(string tableName, string columnName, string columnValue) { try { DbInsert di = null; string sql = null; StringBuilder sqls = new StringBuilder(); DbSelect ds = new DbSelect(tableName + " A", "A"); ds.IsInitDefaultValue = false; ds.Where("A." + columnName, "=", columnValue); DataTable dt = Instance.GetDataTable(ds.GetSql(), null); for (int i = 0; i < dt.Rows.Count; i++) { di = new DbInsert(tableName, "GetInsertSql"); di.IsInitDefaultValue = false; for (int j = 0; j < dt.Columns.Count; j++) { di.Values(dt.Columns[j].ColumnName, dt.Rows[i][dt.Columns[j].ColumnName].ToString()); } sql = di.GetSql(); sqls.Append(sql + ";\n"); } return sqls; } catch (Exception) { throw; } } #endregion #region 数据库名称 /// /// 数据库名称 /// public static string DatabaseName { get { return Instance.Connection.Database; } } #endregion public static DataTable GetDataTable(string sql, object param = null, CommandType? commandType = null, bool beginTransaction = false) => Instance.GetDataTable(sql, param, commandType, beginTransaction); public static async Task GetDataTableAsync(string cmd, object param = null, IDbTransaction transaction = null, CommandType? commandType = null, int? commandTimeout = null) => await Instance.GetDataTableAsync(cmd, param, transaction, commandType, commandTimeout); public static List QueryList(string cmd, object param = null, CommandType? commandType = null, bool beginTransaction = false) where T : class => Instance.QueryList(cmd, param, commandType, beginTransaction); public static async Task> QueryListAsync(string cmd, object param = null, bool beginTransaction = false, CommandType? commandType = null, int? commandTimeout = null) where T : class => await Instance.QueryListAsync(cmd, param, commandType, beginTransaction, commandTimeout); public static T QueryFirst(string cmd, object param = null, CommandType? commandType = null, bool beginTransaction = false) where T : class => Instance.QueryFirst(cmd, param, commandType, beginTransaction); public static async Task QueryFirstAsync(string cmd, object param = null, CommandType? commandType = null, bool beginTransaction = false, int? commandTimeout = null) where T : class => await Instance.QueryFirstAsync(cmd, param, commandType, beginTransaction, commandTimeout); public static object ExecuteScalar(string cmd, object param = null, CommandType? commandType = null, bool beginTransaction = false) => Instance.ExecuteScalar(cmd, param, commandType, beginTransaction); public static async Task ExecuteScalarAsync(string cmd, object param = null, CommandType? commandType = null, bool beginTransaction = false) => await Instance.ExecuteScalarAsync(cmd, param, commandType, beginTransaction); public static int ExcuteNonQuery(string cmd, object param, CommandType? commandType = null, bool beginTransaction = false) => Instance.ExcuteNonQuery(cmd, param, commandType, beginTransaction); public static (List, List) QueryMultiple(string cmd, object param = null, CommandType? commandType = null, bool beginTransaction = false) => Instance.QueryMultiple(cmd, param, commandType, beginTransaction); public static (List, List, List) QueryMultiple(string cmd, object param = null, CommandType? commandType = null, bool beginTransaction = false) => Instance.QueryMultiple(cmd, param, commandType, beginTransaction); public static int ExecuteDML(string cmd, object param, CommandType? commandType = null, IDbTransaction dbTransaction = null) => Instance.ExecuteDML(cmd, param, commandType, dbTransaction); public static async Task ExecuteDMLAsync(string cmd, object param, CommandType? commandType = null, IDbTransaction dbTransaction = null) => await Instance.ExecuteDMLAsync(cmd, param, commandType, dbTransaction); public static int Add(T entity, Expression> updateFileds = null, bool beginTransaction = false) { return Instance.Add(entity, updateFileds, beginTransaction); } /// /// /// /// /// /// 指定插入的字段 /// 是否开启事务 /// public static int AddRange(IEnumerable entities, Expression> addFileds = null, bool beginTransaction = true) { return Instance.AddRange(entities, addFileds, beginTransaction); } public static int Update(T entity, Expression> updateFileds = null, bool beginTransaction = true) { return Instance.Update(entity, updateFileds, beginTransaction); } /// ///(根据主键批量更新实体) sqlserver使用的临时表参数化批量更新,mysql待优化 /// /// /// 实体必须带主键 /// 批定更新字段 /// /// public static int UpdateRange(IEnumerable entities, Expression> updateFileds = null, bool beginTransaction = true) { return Instance.UpdateRange(entities, updateFileds, beginTransaction); } public static int BulkInsert(DataTable table, string tableName, SqlBulkCopyOptions? sqlBulkCopyOptions = null, string fileName = null, string tmpPath = null) { return Instance.BulkInsert(table, tableName, sqlBulkCopyOptions, fileName, tmpPath); } }