using Dapper; using Microsoft.Data.Sqlite; using MySql.Data.MySqlClient; using Npgsql; using System.Data; using Long.Core.Query; using Long.Core.Settings; using Microsoft.Extensions.Configuration; using System.Data.SqlClient; namespace Long.Dapper { /// /// 静态配置文件 /// public static class DatabaseConfig { public static string AppSettingsFileName = "appsettings.json"; } /// /// 基础数据库连接类 /// public class Database : IDatabase { private string _tableName = ""; private IList _fields; /// /// 数据库连接字符串 /// public string ConnectionString { get; set; } /// /// 数据库配置关键字 /// public string DbKey { get; set; } /// /// 数据库类型 /// public string DbType { get; set; } /// /// 基础数据库连接类 /// /// 数据库配置关键字 /// 数据库类型 public Database(string dbKey = "Default", string dbType = "MySql") { SetConnectionString(dbKey); DbType = dbType; // 实例化字段 _fields = new List(); // 获取表名 var type = typeof(TEntity); _tableName = type.Name; // 获取字段 var props = type.GetProperties(); for (var i = 0; i < props.Length; i++) { _fields.Add(props[i].Name); } } /// /// 设置 appsettings.json 中的数据库连接字符串 /// /// 数据库配置关键字 public void SetConnectionString(string dbKey) { IConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); configurationBuilder.AddJsonFile(DatabaseConfig.AppSettingsFileName, optional: true, reloadOnChange: true); IConfiguration configuration = configurationBuilder.Build(); string res = configuration.GetSection($"ConnectionStrings:{dbKey}").Value ?? ""; if (!String.IsNullOrWhiteSpace(res)) { ConnectionString = res; DbKey = dbKey; } } /// /// 获取数据库连接 /// /// /// public IDbConnection GetDbConnection() { if (string.IsNullOrWhiteSpace(ConnectionString)) { throw new ApplicationException("数据库连接字符串异常!"); } switch (DbType.ToLower()) { case "npgsql": return new NpgsqlConnection(ConnectionString); case "sqlserver": return new SqlConnection(ConnectionString); case "sqlite": return new SqliteConnection(ConnectionString); case "mysql": default: return new MySqlConnection(ConnectionString); } } #region 查询 /// /// 查询列表 /// /// 泛型 /// SQL 查询字符串 /// SQL 参数对象 /// 泛型列表 public IEnumerable Query(string sqlString, object? param = null) { IDbConnection conn = GetDbConnection(); return conn.Query(sqlString, param); } /// /// 查询列表 /// /// 泛型 /// SQL 查询字符串 /// SQL 参数对象 /// 泛型列表 public async Task> QueryAsync(string sqlString, object? param = null) { IDbConnection conn = GetDbConnection(); return await conn.QueryAsync(sqlString, param); } /// /// 查询第一条数据 /// /// 泛型 /// SQL 查询字符串 /// SQL 参数对象 /// 泛型对象 public T QueryFirst(string sqlString, object? param = null) { IDbConnection conn = GetDbConnection(); return conn.QueryFirstOrDefault(sqlString, param); } /// /// 查询第一条数据 /// /// 泛型 /// SQL 查询字符串 /// SQL 参数对象 /// 泛型对象 public async Task QueryFirstAsync(string sqlString, object? param = null) { IDbConnection conn = GetDbConnection(); return await conn.QueryFirstOrDefaultAsync(sqlString, param); } /// /// 获取数据 /// /// public IEnumerable Get() { return Query(GetSql(new QueryParamenter())); } /// /// 获取数据 /// /// public async Task> GetAsync() { return await QueryAsync(GetSql(new QueryParamenter())); } /// /// 获取数据 /// /// /// /// public IEnumerable Get(string sql) { return Query(sql); } /// /// 获取数据 /// /// /// /// public async Task> GetAsync(string sql) { return await QueryAsync(sql); } /// /// 获取数据 /// /// /// /// public IEnumerable Get(string sql, object param) { return Query(sql, param); } /// /// 获取数据 /// /// /// /// public async Task> GetAsync(string sql, object param) { return await QueryAsync(sql, param); } /// /// 获取数据 /// /// /// /// public async Task> GetAsync(string sql, object param) { return await QueryAsync(sql, param); } /// /// 通过id获取数据 /// /// 内码 /// public IEnumerable Get(long id) { return Query(GetByIdSql(), new { Id = id }); } /// /// 通过id获取数据 /// /// 内码 /// public async Task> GetAsync(long id) { return await QueryAsync(GetByIdSql(), new { Id = id }); } /// /// 通过id获取数据 /// /// 内码 /// public async Task> GetAsync(long id) { return await QueryAsync(GetByIdSql(), new { Id = id }); } /// /// 通过一堆id获取数据 /// /// 内码列表 /// public IEnumerable Get(IEnumerable ids) { return Query(GetByIdsSql(), new { Ids = ids }); } /// /// 通过一堆id获取数据 /// /// 内码列表 /// public async Task> GetAsync(IEnumerable ids) { return await QueryAsync(GetByIdsSql(), new { Ids = ids }); } /// /// 获取数据 /// /// 查询参数 /// public IEnumerable Get(QueryParamenter param) { return Query(GetSql(param)); } /// /// 获取数据 /// /// 查询参数 /// public async Task> GetAsync(QueryParamenter param) { return await QueryAsync(GetSql(param)); } /// /// 获取数据 /// /// 查询参数 /// public async Task> GetAsync(QueryParamenter param) { return await QueryAsync(GetSql(param)); } /// /// 通过id获取一条数据 /// /// public TEntity GetFirst() { return QueryFirst(GetSql()); } /// /// 通过id获取一条数据 /// /// public async Task GetFirstAsync() { return await QueryFirstAsync(GetSql()); } /// /// 通过id获取一条数据 /// /// /// public TEntity GetFirst(long id) { return QueryFirst(GetByIdSql(), new { Id = id }); } /// /// 通过id获取一条数据 /// /// /// public async Task GetFirstAsync(long id) { return await QueryFirstAsync(GetByIdSql(), new { Id = id }); } /// /// 获取一条数据 /// /// /// public TEntity GetFirst(string sql) { return QueryFirst(sql); } /// /// 获取一条数据 /// /// /// public async Task GetFirstAsync(string sql) { return await QueryFirstAsync(sql); } /// /// 获取一条数据 /// /// /// /// public TEntity GetFirst(string sql, object param) { return QueryFirst(sql, param); } /// /// 获取一条数据 /// /// /// /// public async Task GetFirstAsync(string sql, object param) { return await QueryFirstAsync(sql, param); } /// /// 获取一条数据 /// /// /// /// public async Task GetFirstAsync(string sql, object param) { return await QueryFirstAsync(sql, param); } /// /// 获取一条数据 /// /// /// public TEntity GetFirst(QueryParamenter queryParamenter, object? param = null) { return QueryFirst(GetSql(queryParamenter), param); } /// /// 获取一条数据 /// /// /// public async Task GetFirstAsync(QueryParamenter queryParamenter, object? param = null) { return await QueryFirstAsync(GetSql(queryParamenter), param); } /// /// 获取一条数据 /// /// /// public TEntity GetFirst(QueryParamenter queryParamenter) { return QueryFirst(GetSql(queryParamenter)); } /// /// 获取一条数据 /// /// /// public async Task GetFirstAsync(QueryParamenter queryParamenter) { return await QueryFirstAsync(GetSql(queryParamenter)); } /// /// 获取一条数据 /// /// /// public T GetFirst(QueryParamenter queryParamenter) { return QueryFirst(GetSql(queryParamenter)); } /// /// 获取一条数据 /// /// /// public async Task GetFirstAsync(QueryParamenter queryParamenter) { return await QueryFirstAsync(GetSql(queryParamenter)); } #endregion #region 统计 /// /// 统计表记录数 /// /// 记录数 public int Count() { string sql = $"SELECT COUNT(1) FROM {_tableName};"; return QueryFirst(sql); } /// /// 统计表记录数 /// /// 记录数 public async Task CountAsync() { string sql = $"SELECT COUNT(1) FROM {_tableName};"; return await QueryFirstAsync(sql); } /// /// 统计表记录数 /// /// 记录数 public async Task CountAsync(QueryParamenter queryParamenter) { return await QueryFirstAsync(GetCountSql(queryParamenter)); } /// /// 统计表记录数 /// /// 内码 /// 记录数 public int Count(long id) { string sql = $"SELECT COUNT(1) FROM {_tableName} WHERE Id=@Id;"; return QueryFirst(sql, new { Id = id }); } /// /// 统计表记录数 /// /// 内码 /// 记录数 public async Task CountAsync(long id) { string sql = $"SELECT COUNT(1) FROM {_tableName} WHERE Id=@Id;"; return await QueryFirstAsync(sql, new { Id = id }); } /// /// 统计表记录数 /// /// 表名 /// 记录数 public int Count(string tableName) { string sql = $"SELECT COUNT(1) FROM {tableName};"; return QueryFirst(sql); } /// /// 统计表记录数 /// /// 表名 /// 记录数 public async Task CountAsync(string tableName) { string sql = $"SELECT COUNT(1) FROM {tableName};"; return await QueryFirstAsync(sql); } /// /// 通过条件统计表记录数 /// /// 筛选条件,不包含 WHERE 关键字 /// 记录数 public int CountByWhere(string where) { string sql = $"SELECT COUNT(1) FROM {_tableName} WHERE {where};"; return QueryFirst(sql); } /// /// 通过条件统计表记录数 /// /// 筛选条件,不包含 WHERE 关键字 /// 记录数 public async Task CountByWhereAsync(string where) { string sql = $"SELECT COUNT(1) FROM {_tableName} WHERE {where};"; return await QueryFirstAsync(sql); } /// /// 通过条件统计表记录数 /// /// 内码 /// 筛选条件,不包含 WHERE 关键字 /// 记录数 public int CountByWhere(long id, string where) { string sql = $"SELECT COUNT(1) FROM {_tableName} WHERE Id=@Id AND {where};"; return QueryFirst(sql, new { Id = id }); } /// /// 通过条件统计表记录数 /// /// 内码 /// 筛选条件,不包含 WHERE 关键字 /// 记录数 public async Task CountByWhereAsync(long id, string where) { string sql = $"SELECT COUNT(1) FROM {_tableName} WHERE Id=@Id AND {where};"; return await QueryFirstAsync(sql, new { Id = id }); } /// /// 通过条件统计表记录数 /// /// 表名 /// 筛选条件,不包含 WHERE 关键字 /// 记录数 public int CountByWhere(string tableName, string where) { string sql = $"SELECT COUNT(1) FROM {tableName} WHERE {where};"; return QueryFirst(sql); } /// /// 通过条件统计表记录数 /// /// 表名 /// 筛选条件,不包含 WHERE 关键字 /// 记录数 public async Task CountByWhereAsync(string tableName, string where) { string sql = $"SELECT COUNT(1) FROM {tableName} WHERE {where};"; return await QueryFirstAsync(sql); } #endregion #region 插入 /// /// 插入数据 /// /// SQL /// 插入对象 /// 插入记录数 public int Insert(string sql, object? insert) { var result = Execute(sql, insert); if (result == 0) { throw new ApplicationException("插入记录失败!"); } return result; } /// /// 插入数据 /// /// SQL /// 插入对象 /// public async Task InsertAsync(string sql, object? insert) { var result = await ExecuteAsync(sql, insert); if (result == 0) { throw new ApplicationException("插入记录失败!"); } return result; } /// /// 插入数据,自动填入Id /// /// 插入对象 /// 记录内码 public long Insert(TEntity insert) { var id = SetId(insert); var res = Insert(InsertSql(), insert); return res > 0 ? id : res; } /// /// 插入数据,自动填入Id /// /// 插入对象 /// 记录内码 public async Task InsertAsync(TEntity insert) { var id = SetId(insert); var res = await InsertAsync(InsertSql(), insert); return res > 0 ? id : res; } /// /// 插入一堆数据,自动填入Id /// /// 插入对象列表 /// 记录内码列表 public IEnumerable Insert(IEnumerable inserts) { var ids = new List(); foreach (var item in inserts) { var id = SetId(item); ids.Add(id); } Insert(InsertSql(), inserts); return ids; } /// /// 插入一堆数据,自动填入Id /// /// 插入对象列表 /// 记录内码列表 public async Task> InsertAsync(IEnumerable inserts) { var ids = new List(); foreach (var item in inserts) { var id = await SetIdAsync(item); ids.Add(id); } await InsertAsync(InsertSql(), inserts); return ids; } #endregion #region 更新 /// /// 更新数据 /// /// SQL /// 更新对象 /// public int Update(string sql, object? update) { return Execute(sql, update); } /// /// 更新数据 /// /// SQL /// 更新对象 /// public async Task UpdateAsync(string sql, object? update) { return await ExecuteAsync(sql, update); } /// /// 更新数据 /// /// 更新对象 /// public int Update(TEntity update) { return Update(UpdateSql(), update); } /// /// 更新数据 /// /// 更新对象 /// public async Task UpdateAsync(TEntity update) { return await UpdateAsync(UpdateSql(), update); } /// /// 更新数据 /// /// 更新对象 /// 更新字段 /// public int Update(TEntity update, string[] fields) { return Update(UpdateSql(fields), update); } /// /// 更新数据 /// /// 更新对象 /// 更新字段 /// public async Task UpdateAsync(TEntity update, string[] fields) { return await UpdateAsync(UpdateSql(fields), update); } /// /// 更新一堆数据 /// /// 更新对象列表 /// public int Update(IEnumerable updates) { return Update(UpdatesSql(), updates); } /// /// 更新一堆数据 /// /// 更新对象列表 /// public async Task UpdateAsync(IEnumerable updates) { return await UpdateAsync(UpdatesSql(), updates); } /// /// 更新一堆数据 /// /// 更新对象列表 /// 更新字段 /// public int Update(IEnumerable updates, string[] fields) { return Update(UpdatesSql(fields), updates); } /// /// 更新一堆数据 /// /// 更新对象列表 /// 更新字段 /// public async Task UpdateAsync(IEnumerable updates, string[] fields) { return await UpdateAsync(UpdatesSql(fields), updates); } #endregion #region 删除 /// /// 删除 /// /// 内码 /// public int Delete(long id) { return Execute(DeleteSql(), new { Id = id }); } /// /// 删除 /// /// 内码 /// public async Task DeleteAsync(long id) { return await ExecuteAsync(DeleteSql(), new { Id = id }); } /// /// 删除 /// /// 一堆内码 /// public int Delete(IEnumerable ids) { return Execute(DeletesSql(), new { Ids = ids }); } /// /// 删除 /// /// 一堆内码 /// public async Task DeleteAsync(IEnumerable ids) { return await ExecuteAsync(DeletesSql(), new { Ids = ids }); } #endregion #region 执行 /// /// 执行 SQL /// /// sql字符串 /// public int Execute(string sqlString) { using (IDbConnection conn = GetDbConnection()) { return conn.Execute(sqlString); } } /// /// 执行 SQL /// /// sql字符串 /// public async Task ExecuteAsync(string sqlString) { using (IDbConnection conn = GetDbConnection()) { return await conn.ExecuteAsync(sqlString); } } /// /// 执行 SQL /// /// sql字符串 /// 传入参数 /// public int Execute(string sqlString, object? param) { using (IDbConnection conn = GetDbConnection()) { return conn.Execute(sqlString, param); } } /// /// 执行 SQL /// /// sql字符串 /// 传入参数 /// public async Task ExecuteAsync(string sqlString, object? param) { using (IDbConnection conn = GetDbConnection()) { return await conn.ExecuteAsync(sqlString, param); } } /// /// 执行 SQL /// /// sql字符串 /// 传入参数 /// 数据库事务 /// public int Execute(string sqlString, object? param = null, IDbTransaction? dbTransaction = null) { using (IDbConnection conn = GetDbConnection()) { if (dbTransaction == null) { return conn.Execute(sqlString, param); } return conn.Execute(sqlString, param, dbTransaction); } } /// /// 执行 SQL /// /// sql字符串 /// 传入参数 /// 数据库事务 /// public async Task ExecuteAsync(string sqlString, object? param = null, IDbTransaction? dbTransaction = null) { using (IDbConnection conn = GetDbConnection()) { if (dbTransaction == null) { return await conn.ExecuteAsync(sqlString, param); } return await conn.ExecuteAsync(sqlString, param, dbTransaction); } } /// /// 执行存储过程 /// /// sql字符串 /// 传入参数 /// public int ExecuteStoredProcedure(string storedProcedure, object? param = null) { using (IDbConnection conn = GetDbConnection()) { return conn.Execute(storedProcedure, param, null, null, CommandType.StoredProcedure); } } /// /// 执行存储过程 /// /// sql字符串 /// 传入参数 /// public async Task ExecuteStoredProcedureAsync(string storedProcedure, object? param = null) { using (IDbConnection conn = GetDbConnection()) { return await conn.ExecuteAsync(storedProcedure, param, null, null, CommandType.StoredProcedure); } } #endregion #region 获取SQL /// /// 获取SQL /// /// public string GetSql() { return GetSql(new QueryParamenter()); } /// /// 获取SQL /// /// /// public string GetSql(QueryParamenter queryParamenter) { // 分页记录起始 int start = 0; // 是否分页 bool isPage = false; string sql = "SELECT "; // 生成去重语句 if (queryParamenter.Distinct) { sql += "DISTINCT "; } // 生成查询字段 if (queryParamenter.Fields != null) { sql += string.Join(", ", queryParamenter.Fields); } else { sql += string.Join(", ", _fields); } sql += $" FROM {_tableName}"; // 生成查询条件 if (!string.IsNullOrWhiteSpace(queryParamenter.Where)) { sql += " WHERE " + queryParamenter.Where; } // 判断是否分页 if (queryParamenter.Page.HasValue && queryParamenter.PageSize.HasValue && queryParamenter.Page > 0 && queryParamenter.PageSize > 0) { isPage = true; start = (queryParamenter.Page.Value - 1) * queryParamenter.PageSize.Value; } // 生成分组 if (!string.IsNullOrWhiteSpace(queryParamenter.GroupBy)) { sql += " GROUP BY " + queryParamenter.GroupBy; } // 生产排序 bool isOrderBy = false; if (!string.IsNullOrWhiteSpace(queryParamenter.OrderBy)) { isOrderBy = true; sql += " ORDER BY " + queryParamenter.OrderBy; } // 分页 if (isPage) { switch (DbType) { case "SqlServer": sql += $"{(isOrderBy ? " ORDER BY" : "")} Id OFFSET {start} ROWS FETCH NEXT {queryParamenter.PageSize ?? 20} ROWS ONLY"; break; case "MySql": case "PgSql": case "Sqlite": sql += $" LIMIT {queryParamenter.PageSize ?? 20} OFFSET {start}"; break; } } sql += ";"; return sql; } /// /// 获取统计SQL /// /// /// public string GetCountSql(QueryParamenter queryParamenter) { string sql = "SELECT "; // 生成去重语句 if (queryParamenter.Distinct) { sql += "DISTINCT "; } // 生成查询字段 sql += $" COUNT(1) FROM {_tableName}"; // 生成查询条件 if (!string.IsNullOrWhiteSpace(queryParamenter.Where)) { sql += " WHERE " + queryParamenter.Where; } sql += ";"; return sql; } /// /// 查询全部SQL /// /// public string GetAllSql() { return "SELECT " + string.Join(", ", _fields) + $" FROM {_tableName};"; } /// /// 查询全部SQL /// /// public string GetAllSql() { // 实例化字段 var fields = new List(); // 获取表名 var type = typeof(T); var tableName = type.Name; // 获取字段 var props = type.GetProperties(); for (var i = 0; i < props.Length; i++) { fields.Add(props[i].Name); } return "SELECT " + string.Join(", ", fields) + $" FROM {tableName};"; } /// /// 通过id查询SQL /// /// public string GetByIdSql() { string sql = GetAllSql(); sql = sql.Substring(0, sql.IndexOf(";")); sql += " WHERE Id = @Id"; return sql; } /// /// 通过id查询SQL /// /// public string GetByIdSql() { string sql = GetAllSql(); sql = sql.Substring(0, sql.IndexOf(";")); sql += " WHERE Id = @Id"; return sql; } /// /// 通过一堆id查询SQL /// /// public string GetByIdsSql() { string sql = GetAllSql(); sql = sql.Substring(0, sql.IndexOf(";")); sql += " WHERE Ids IN @Ids"; return sql; } /// /// 插入SQL /// /// public string InsertSql() { return $"INSERT INTO {_tableName} (" + string.Join(", ", _fields) + ") VALUES (@" + string.Join(", @", _fields) + ");"; } /// /// 更新SQL /// /// public string UpdateSql() { string sql = $"UPDATE {_tableName} SET"; var i = 0; foreach (var field in _fields) { if (field == "Id") { continue; } if (i == 0) { sql += " "; } else { sql += ", "; } sql += field + " = @" + field; i++; } sql += " WHERE Id = @Id"; return sql; } /// /// 更新SQL /// /// 要更新的字段 /// public string UpdateSql(string[] fields) { string sql = $"UPDATE {_tableName} SET "; foreach (var field in fields) { sql += field + " = @" + field; } sql += " WHERE Id = @Id"; return sql; } /// /// 更新一堆SQL /// /// public string UpdatesSql() { string sql = $"UPDATE {_tableName} SET "; foreach (var field in _fields) { sql += field + " = @" + field; } sql += " WHERE Ids IN @Ids"; return sql; } /// /// 更新一堆SQL /// /// 要更新的字段 /// public string UpdatesSql(string[] fields) { string sql = $"UPDATE {_tableName} SET "; foreach (var field in fields) { sql += field + " = @" + field; } sql += " WHERE Ids IN @Ids"; return sql; } /// /// 获取删除SQL /// /// public string DeleteAllSql() { return $"DELETE {_tableName};"; } /// /// 通过id获取删除SQL /// /// public string DeleteSql() { return $"DELETE {_tableName} WHERE Id = @Id;"; } /// /// 通过一堆id获取删除SQL /// /// public string DeletesSql() { return $"DELETE {_tableName} WHERE Ids IN @Ids;"; } #endregion #region 获取值和编码 /// /// 设置id /// /// /// public long SetId(object? param) { long id = 0; Type type; if (param != null) { id = GetNextValue(); type = param.GetType(); var props = type.GetProperties(); foreach (var prop in props) { if (prop.Name == "Id") { prop.SetValue(param, id); } } } return id; } /// /// 设置id /// /// /// public async Task SetIdAsync(object? param) { long id = 0; Type type; if (param != null) { id = await GetNextValueAsync(); type = param.GetType(); var props = type.GetProperties(); foreach (var prop in props) { if (prop.Name == "Id") { prop.SetValue(param, id); } } } return id; } /// /// 获取下一个值。请在数据库中建立表(NextValue),字段有(TableName: varchar, FieldName: varchar, Value: long) /// /// 默认值:1 /// public long GetNextValue(long defaultValue = 1) { return GetNextValue(_tableName, "Id", defaultValue); } /// /// 获取下一个值。请在数据库中建立表(NextValue),字段有(TableName: varchar, FieldName: varchar, Value: long) /// /// 默认值:1 /// public async Task GetNextValueAsync(long defaultValue = 1) { return await GetNextValueAsync(_tableName, "Id", defaultValue); } /// /// 获取下一个值。请在数据库中建立表(NextValue),字段有(TableName: varchar, FieldName: varchar, Value: long) /// /// 默认值:1 /// public long GetNextValue(string tableName, string fieldName, long defaultValue = 1) { string querySql = $"SELECT TableName, FieldName, Value FROM nextvalue WHERE TableName = @TableName AND FieldName = @FieldName;"; string insertSql = $"INSERT INTO NextValue(TableName, FieldName, Value) Values(@TableName, @FieldName, @Value);"; string updateSql = $"UPDATE NextValue SET Value = @Value WHERE TableName = @TableName AND FieldName = @FieldName;"; var next = QueryFirst(querySql, new { TableName = tableName, FieldName = fieldName }); long result = 0; /** * 没有记录,插入 * 有记录,更新,值递增 */ if (next == null) { result = Execute(insertSql, new { TableName = tableName, FieldName = fieldName, Value = defaultValue + 1 }); if (result == 0) { throw new ApplicationException("插入下一个值失败!"); } return defaultValue; } else { next.Value++; result = Execute(updateSql, new { TableName = tableName, FieldName = fieldName, Value = next.Value }); if (result == 0) { throw new ApplicationException("更新下一个值失败!"); } return next.Value; } } /// /// 获取下一个值。请在数据库中建立表(NextValue),字段有(TableName: varchar, FieldName: varchar, Value: long) /// /// 默认值:1 /// public async Task GetNextValueAsync(string tableName, string fieldName, long defaultValue = 1) { string querySql = $"SELECT TableName, FieldName, Value FROM nextvalue WHERE TableName = @TableName AND FieldName = @FieldName;"; string insertSql = $"INSERT INTO NextValue (TableName, FieldName, Value) Values(@TableName, @FieldName, @Value);"; string updateSql = $"UPDATE NextValue SET Value = @Value WHERE TableName = @TableName AND FieldName = @FieldName;"; var next = await QueryFirstAsync(querySql, new { TableName = tableName, FieldName = fieldName }); long result = 0; /** * 没有记录,插入 * 有记录,更新,值递增 */ if (next == null) { result = await ExecuteAsync(insertSql, new { TableName = tableName, FieldName = fieldName, Value = defaultValue + 1 }); if (result == 0) { throw new ApplicationException("插入下一个值失败!"); } return defaultValue; } else { result = await ExecuteAsync(updateSql, new { TableName = tableName, FieldName = fieldName, Value = next.Value + 1 }); if (result == 0) { throw new ApplicationException("更新下一个值失败!"); } return next.Value; } } #endregion } }