diff --git a/ChaosBot/Database/Controller.cs b/ChaosBot/Database/Controller.cs index 103672a..e35202b 100644 --- a/ChaosBot/Database/Controller.cs +++ b/ChaosBot/Database/Controller.cs @@ -102,6 +102,56 @@ namespace ChaosBot.Database _logger.Fatal($"Controllers.DBWork.RawQuery: Exception [{ex}] thrown, <[{ex.Message}]>."); } } + + public static void UpdateQuery(string table, Dictionary values, Dictionary parameters) + { + try + { + using (_conn) + { + _conn.Open(); + + SqliteCommand cmd = _conn.CreateCommand(); + StringBuilder commandText = new StringBuilder(); + commandText.Append("UPDATE OR FAIL "); + commandText.Append(table); + commandText.Append(" SET "); + + List updateList = new List(); + foreach (string key in values.Keys) + { + updateList.Add($"{key}=@val_{key} "); + cmd.Parameters.AddWithValue($@"val_{key}", values.GetValueOrDefault(key)); + } + + commandText.Append(string.Join(", ", updateList)); + + List filterList = new List(); + foreach (string key in parameters.Keys) + { + filterList.Add($"{key}=@fil_{key} "); + cmd.Parameters.AddWithValue($"@fil_{key}", parameters.GetValueOrDefault(key)); + } + + if (filterList.Count > 0) + { + commandText.Append("WHERE "); + commandText.Append(string.Join(", ", filterList)); + } + + cmd.CommandText = commandText.ToString(); + + cmd.Prepare(); + cmd.ExecuteNonQuery(); + + _conn.Close(); + } + } + catch (Exception ex) + { + _logger.Fatal($"Controllers.DBWork.RawQuery: Exception [{ex}] thrown, <[{ex.Message}]>."); + } + } public static int TransactionQuery(List cmds) {