/// <summary> /// Построение основного тела SQL-запроса типа SELECT /// </summary> private StringBuilder BuildGettingMainSQL(string tableName, DbVal columnsNames) { StringBuilder sql = new StringBuilder(); sql.Append("SELECT "); foreach (string row in columnsNames.Array) { sql.Append($"{row}, "); } sql.Remove(sql.Length - 2, 2); sql.Append($" FROM {tableName}"); return(sql); }
// Перегруженные методы получения данных из таблицы /// <summary> /// Получение значений указанных столбцов /// </summary> public string[][] GetFromTable(string tableName, DbVal columnsNames, string condition = "", int limit = 0) { StringBuilder sql = BuildGettingMainSQL(tableName, columnsNames); if (!condition.Equals("")) { sql.Append(" WHERE " + condition); } if (limit > 0) { sql.Append($" LIMIT {limit}"); } return(CommandGetting(sql.ToString(), columnsNames.Length)); }
/// <summary> /// Проверяет, есть ли в указанной таблице запись, значения выбранных столбцов которой соответствуют переданным значениям /// </summary> public bool CheckIfInTable(string tableName, DbVal columnsNames, DbVal values) { if ((columnsNames.Length != values.Length) || tableName.Equals("")) { return(false); } var sql = new StringBuilder($"SELECT 1 FROM {tableName} WHERE "); for (int i = 0; i < columnsNames.Length; i++) { sql.Append($"{columnsNames[i]}={values[i]} AND "); } sql.Remove(sql.Length - 5, 5); sql.Append(" LIMIT 1"); return(CommandGetting(sql.ToString(), columnsNames.Length) != null); }
/// <summary> /// Добавление в таблицу новой записи с переданными значениями переданных столбцов /// </summary> public bool AddToTable(string tableName, DbVal columnsNames, DbVal values) { if (columnsNames.Length != values.Length || tableName.Equals("")) { return(false); } NpgsqlCommand cmd = CreateCmd(); // Формирование SQL-команды StringBuilder sql = new StringBuilder(); sql.Append($"INSERT INTO {tableName} ("); foreach (string columnName in columnsNames.Array) { sql.Append($"{columnName}, "); } sql.Remove(sql.Length - 2, 2); sql.Append(") VALUES ("); for (int i = 0; i < values.Length; i++) { sql.Append($"@v{i}, "); } sql.Remove(sql.Length - 2, 2); sql.Append(")"); cmd.CommandText = sql.ToString(); // Добавление параметров (значений) for (int i = 0; i < values.Length; i++) { cmd.Parameters.AddWithValue($"v{i}", values[i]); } try { return(cmd.ExecuteNonQuery() != 0); } catch { return(false); } }
/// <summary> /// Изменение в таблице значений переданных столбцов на переданные. Условие должно быть описано на языке SQL. /// </summary> public bool ChangeInTable(string tableName, DbVal columnsNames, DbVal values, string condition = "") { if (columnsNames.Length != values.Length || tableName.Equals("")) { return(false); } NpgsqlCommand cmd = CreateCmd(); // Формирование SQL-команды StringBuilder sql = new StringBuilder(); sql.Append($"UPDATE {tableName} SET "); for (int i = 0; i < columnsNames.Length; i++) { sql.Append($"{columnsNames[i]}=@v{i}, "); } sql.Remove(sql.Length - 2, 2); if (!condition.Equals("")) { sql.Append(" WHERE " + condition); } cmd.CommandText = sql.ToString(); // Добавление параметров (значений) for (int i = 0; i < values.Length; i++) { cmd.Parameters.AddWithValue($"v{i}", values[i]); } try { return(cmd.ExecuteNonQuery() != 0); } catch { return(false); } }
/// <summary> /// Получение значений указанных столбцов с сортировкой /// </summary> public string[][] GetFromTableSorted(string tableName, DbVal columnsNames, string orderBy, IDatabase.OrderType orderType = IDatabase.OrderType.ASC, string condition = "", int limit = 0) { if (!columnsNames.Array.Contains(orderBy)) { return(null); } StringBuilder sql = BuildGettingMainSQL(tableName, columnsNames); if (!condition.Equals("")) { sql.Append(" WHERE " + condition); } sql.Append($" ORDER BY {orderBy} {orderType}"); if (limit > 0) { sql.Append($" LIMIT {limit}"); } return(CommandGetting(sql.ToString(), columnsNames.Length)); }