c#Oledb在foreach循环中添加参数列表

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

添加这个

 cmd.Parameters.Clear(); 

之前

 cmd.Parameters.AddRange(new OleDbParameter[] 

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

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

使用类似于:

 cmd.Parameters.Clear();