2017-01-31 5 views
0

Я пишу приложение, которое создает файл excel с OleDb, проблема в том, что когда программа запускает цикл foreach, она всегда записывает одни и те же данные в строке, а не другое значение объекта в цикле.C# 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 различных пользователей в файле. Как я могу решить эту проблему ?? Спасибо и извините за мой плохой английский.

+0

В вашем примере параметров, которые вы используете переменную пользователя объекта, где, как на вашей конкатенацию строки запроса вы используете переменные компании. – apomene

ответ

3

Добавить это

cmd.Parameters.Clear(); 

перед тем

cmd.Parameters.AddRange(new OleDbParameter[] 
+0

Спасибо. Он отлично работает – pampua84

1

Вы добавляете новый диапазон параметра объекта, который уже имеет набор параметров. Запрос использует только первый набор, переопределяя другие, добавленные после этого.

Вам необходимо очистить параметры перед каждым циклом.

использовать что-то вроде:

cmd.Parameters.Clear();