Это мой идиоматический способ добавления нескольких значений с помощью разделителя с использованием StringBuilder:
string separator = ",";
for (int i = 0; i < column.Length; i++)
{
query.Append(column[i]);
query.Append(separator);
}
query.Length -= separator.Length;
Это предполагает, что у вас будет хотя бы одно значение, и обычно, где я его использую, это будет ошибкойиметь хотя бы одно значение (и, похоже, ваш сценарий таков).
Похоже, что вы оставили этот код открытым для SQL-инъекции.
Вы, кажется, пытаетесь использовать параметры, но я не думаю, что вы сделали это правильно.Как я читаю код, вы используете фактическое значение параметров вместо их индекса.Я бы предложил эту модификацию (предполагается, что ваш массив имен столбцов исходит из надежного источника, а ваши значения - нет):
for (int i = 0; i < values.Length; i++)
{
query.Append("@" + i.ToString()); // instead of query.Append("@" + values[i].ToString());
if (i < values.Length - 1)
{
query.Append(",");
}
}
query.Append(")");
conn.Open();
using (SQLiteCommand cmd = new SQLiteCommand(query.ToString(), conn))
{
for (int i = 0; i < values.Length; i++)
{
cmd.Parameters.AddWithValue("@" + i.ToString(), values[i]); // instead of cmd.Parameters.AddWithValue("@" + values[i].ToString(), values[i]);
}
rowsAffected = cmd.ExecuteNonQuery();
}
}