C# Oledb добавить список параметров в цикле foreach
Я пишу приложение, которое создает файл Excel с OleDb, проблема в том, что когда программа запускает цикл foreach, она всегда записывает в строку одни и те же данные, а не другое значение объекта в цикле.
Код является:
foreach(var user in userList)
{
cmd.CommandText = @"INSERT INTO [User](Id , Name , Code, Username, Location,
CompanyCode, MyDate, Email, MyNote)
VALUES(@Id, @Name, @Code, @Username, @Location)";
cmd.Parameters.AddRange(new OleDbParameter[]
{
new OleDbParameter{ ParameterName = "@Id", Value = user.ID},
new OleDbParameter{ ParameterName = "@Name", Value = user.NAME ?? string.Empty},
new OleDbParameter{ ParameterName = "@Code", Value = user.CODE ?? string.Empty},
new OleDbParameter{ ParameterName = "@Username", Value = user.USERNAME ?? string.Empty},
new OleDbParameter{ ParameterName = "@Location", Value = user.LOCATION ?? string.Empty},
});
cmd.ExecuteNonQuery();
}
У меня 12 пользователей, но в файле Excel 12 строк с одним и тем же пользователем. Пример:
ExcelRow ID NAME CODE USERNAME LOCATION
1 1 Fra 15 Fra NY
2 1 FRA 15 Fra NY
3 1 FRA 15 Fra NY
4 1 FRA 15 Fra NY
5 .......
Вместо этого, если я напишу обычный запрос, как:
cmd.CommandText = @"INSERT INTO [User](Id , Name , Code, Username, Location, CompanyCode, MyDate, Email, MyNote) VALUES(" + company.ID + ", '" + company.NAME + "', '" + company.CODE + "', '" + company.USERNAME + "', '" + company.CODE_LOCATION + "')";
Работает и пишет 12 разных пользователей в файл. Как я могу решить эту проблему?? Спасибо и извините за мой плохой английский.
2 ответа
Добавь это
cmd.Parameters.Clear();
до
cmd.Parameters.AddRange(new OleDbParameter[]
Вы добавляете новый диапазон параметров к объекту, который уже имеет набор параметров. Запрос использует только первый набор, переопределяя остальные, которые вы добавили после этого.
Вам необходимо очистить параметры перед каждым циклом.
Используйте что-то вроде:
cmd.Parameters.Clear();