public async Task <IActionResult> OnPost(string userName, [FromServices] ISender sender) { var emailData = DataUpdateBehavior <EmailAddress> .DeleteValue(); if (!string.IsNullOrEmpty(Email)) { emailData = DataUpdateBehavior <EmailAddress> .CreateOrUpdateValue(new(Email) ); } var cmd = new UpdateAppUserDetailsCommand( new(userName), new(DisplayName ?? string.Empty), emailData); await sender.Send(cmd); return(RedirectToPage("User", new { userName = userName })); }
public UpdateAppUserDetailsCommand(UserName userName, UserDisplayName?displayName, DataUpdateBehavior <EmailAddress> emailAddress) { UserName = Guard.NotNull(userName, nameof(userName)); EmailAddress = Guard.NotNull(emailAddress, nameof(emailAddress)); DisplayName = displayName; }
/// <summary> /// 根据更新模式,执行多个sql /// </summary> /// <param name="updateBehavior">执行模式</param> /// <param name="scriptCollection">带参数的数据库脚本执行对象集合</param> public void ExecuteMultiSql(DataUpdateBehavior updateBehavior, List<SqlParamterItem> scriptCollection) { switch (updateBehavior) { case DataUpdateBehavior.Standard: foreach (var sql in scriptCollection) { ExecuteSql(sql); } break; case DataUpdateBehavior.Continue: Exception ex = null; foreach (var sql in scriptCollection) try { ExecuteSql(sql); } catch (Exception execEx) { ex = execEx; } if (ex != null) throw ex; break; case DataUpdateBehavior.Transactional: using (var conn = CreateConnection()) { conn.Open(); DbTransaction dbTran = null; try { dbTran = conn.BeginTransaction(); foreach (var sql in scriptCollection) { using (var dbCommand = conn.CreateCommand()) { dbCommand.Transaction = dbTran; dbCommand.CommandType = CommandType.Text; dbCommand.CommandText = sql.Sql; sql.ParamterCollection.ForEach(item => { _db.AddInParameter(dbCommand, item.ParameterName, item.DbType, item.Value); }); dbCommand.ExecuteNonQuery(); } } dbTran.Commit(); } catch (Exception) { if (dbTran != null) dbTran.Rollback(); throw; } finally { conn.Close(); conn.Dispose(); } } break; } }
/// <summary> /// 根据更新模式,执行多个sql /// </summary> /// <param name="updateBehavior">更新模式</param> /// <param name="sqlTextCollection">sql集合</param> public void ExecuteMultiSql(DataUpdateBehavior updateBehavior, params string[] sqlTextCollection) { switch (updateBehavior) { case DataUpdateBehavior.Standard: foreach (var sql in sqlTextCollection) ExecuteSql(sql); break; case DataUpdateBehavior.Continue: Exception ex = null; foreach (var sql in sqlTextCollection) try { ExecuteSql(sql); } catch (Exception execEx) { ex = execEx; } if (ex != null) throw ex; break; case DataUpdateBehavior.Transactional: using (var conn = CreateConnection()) { conn.Open(); DbTransaction dbTran = null; try { dbTran = conn.BeginTransaction(); using (var dbCommand = conn.CreateCommand()) { dbCommand.Transaction = dbTran; dbCommand.CommandType = CommandType.Text; foreach (var sql in sqlTextCollection) { dbCommand.CommandText = sql; dbCommand.ExecuteNonQuery(); } } dbTran.Commit(); } catch (Exception) { if (dbTran != null) dbTran.Rollback(); throw; } finally { conn.Close(); conn.Dispose(); } } break; } }
///<summary> /// 更新DataTable ///</summary> ///<param name = "dataSource">数据源</param> ///<param name = "commandType">命令</param> ///<param name = "updateBehavior">更新行为</param> public void UpdateDataTable(DataTable dataSource, UpdateCommandType commandType, DataUpdateBehavior updateBehavior) { var updateCommandColl = new UpdateCommandConditionCollections(updateBehavior) { { dataSource, commandType, updateBehavior } }; UpdateDataTable(updateCommandColl); }
/// <summary> /// 执行sqlFor参数信息(根据参数信息和更新行为执行sql) /// </summary> /// <param name="sql">sql语句</param> /// <param name="ParameterInfoList">参数信息集合(key:数据行号;value:参数集合)</param> /// <param name="updateBehavior">更新模式</param> public void ExecuteSqlForParameterInfo(string sql, Dictionary<int, List<ParameterInfo>> ParameterInfoList, DataUpdateBehavior updateBehavior) { switch (updateBehavior) { case DataUpdateBehavior.Standard: DbCommand cmd = GetSqlStringCommand(sql); foreach (var i in ParameterInfoList) { cmd.Parameters.Clear(); foreach (var p in i.Value) _db.AddInParameter(cmd, p.ParameterName, p.DbType, p.Value); _db.ExecuteNonQuery(cmd); } if (cmd.Connection != null) { cmd.Connection.Close(); cmd.Connection.Dispose(); } break; case DataUpdateBehavior.Continue: Exception ex = null; DbCommand cmd1 = GetSqlStringCommand(sql); foreach (var i in ParameterInfoList) { try { cmd1.Parameters.Clear(); foreach (var p in i.Value) _db.AddInParameter(cmd1, p.ParameterName, p.DbType, p.Value); _db.ExecuteNonQuery(cmd1); } catch (Exception execEx) { ex = execEx; } if (ex != null) throw ex; } if (cmd1.Connection != null) { cmd1.Connection.Close(); cmd1.Connection.Dispose(); } break; case DataUpdateBehavior.Transactional: using (var conn = CreateConnection()) { conn.Open(); DbTransaction dbTran = null; try { dbTran = conn.BeginTransaction(); using (var dbCommand = conn.CreateCommand()) { dbCommand.Transaction = dbTran; dbCommand.CommandType = CommandType.Text; dbCommand.CommandText = sql; foreach (var i in ParameterInfoList) { dbCommand.Parameters.Clear(); foreach (var p in i.Value) _db.AddInParameter(dbCommand, p.ParameterName, p.DbType, p.Value); dbCommand.ExecuteNonQuery(); } } dbTran.Commit(); } catch (Exception) { if (dbTran != null) dbTran.Rollback(); throw; } finally { conn.Close(); conn.Dispose(); } } break; } }
/// <summary> /// 构造 /// </summary> /// <param name = "dataSource">数据源</param> /// <param name = "commandType">命令类型</param> /// <param name = "updateBehavior">更新行为</param> public UpdateCommandCondition(DataTable dataSource, UpdateCommandType commandType, DataUpdateBehavior updateBehavior) : this(dataSource, commandType) { UpdateBehavior = updateBehavior; }
private async Task UpdateUserDisplayName() { var cmd = new UpdateAppUserDetailsCommand(new("user"), new("user (updated)"), DataUpdateBehavior <EmailAddress> .IgnoreValue()); await mediator.Send(cmd); }