Search code examples
c#.netexceloledboledbparameter

c# Oledb add list of parameters in a foreach loop


i write an application that creates an excel file with OleDb, the problem is that when the program runs a foreach loop it writes always the same data in the row, not the different value of the object in the loop.

The code is:

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();
}

I have 12 user but the excel file has 12 rows with the same user. Example:

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        ....... 

Instead if i write normal query like:

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 + "')";

It works and write 12 different user in the file. How can i solve this problem?? Thank you and sorry for my bad english.


Solution

  • Add this

    cmd.Parameters.Clear();
    

    before

    cmd.Parameters.AddRange(new OleDbParameter[]