private static void UpdateRow(SqliteConnection con, BaseTable table, BaseModelItem row) { SqliteCommand cmd = con.CreateCommand(); SqlColumn[] columns = table.GetCustomColumns(); object?[] colValues = row.GetCustomValues(); string[] preparedUpdate = new string[columns.Length]; for (int i = 0; i < columns.Length; i++) { string paramName = "@" + columns[i]; preparedUpdate[i] = $"{columns[i]} = {paramName}"; cmd.Parameters.Add(CreateParameter(paramName, columns[i].SqlType, colValues[i])); } cmd.CommandText = $"UPDATE {table.TableName} SET {string.Join(", ", preparedUpdate)} WHERE {table.Id} = {row.Id}"; cmd.ExecuteNonQuery(); }
private static void InsertRow(SqliteConnection con, BaseTable table, BaseModelItem row, bool ignoreConflict = false) { SqliteCommand cmd = con.CreateCommand(); SqlColumn[] columns = table.GetCustomColumns(); string[] paramNames = new string[columns.Length]; object?[] formattedValues = row.GetCustomValues(); for (int i = 0; i < formattedValues.Length; i++) { paramNames[i] = "@" + columns[i]; cmd.Parameters.Add(CreateParameter(paramNames[i], columns[i].SqlType, formattedValues[i])); } cmd.CommandText = $"{(ignoreConflict ? "INSERT OR IGNORE " : "INSERT ")} INTO {table.TableName} ("; cmd.CommandText += string.Join <SqlColumn>(", ", columns); cmd.CommandText += $") VALUES({string.Join(',', paramNames)})"; cmd.ExecuteNonQuery(); cmd = con.CreateCommand(); cmd.CommandText = "select last_insert_rowid()"; row.Id = Convert.ToInt32(cmd.ExecuteScalar()); }