2017-01-31 53 views
0

我編寫了一個應用程序,用OleDb創建一個excel文件,問題是當程序運行一個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();