0

我编写了一个使用 OleDb 创建 excel 文件的应用程序,问题是当程序运行 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 个不同的用户。我怎么解决这个问题??谢谢你,对不起我的英语不好。

4

2 回答 2

4

添加这个

cmd.Parameters.Clear();

cmd.Parameters.AddRange(new OleDbParameter[]
于 2017-01-31T14:45:20.487 回答
1

您正在向已经具有一组参数的对象添加新的参数范围。该查询仅使用第一组,覆盖您之后添加的其他组。

您需要在每次循环之前清除参数。

使用类似的东西:

cmd.Parameters.Clear();
于 2017-01-31T14:47:21.977 回答