2017-01-31 4 views
0

Ich schreibe eine Anwendung, die eine Excel-Datei mit OleDb erstellt, das Problem ist, dass, wenn das Programm eine foreach-Schleife ausführt, immer die gleichen Daten in der Zeile, nicht den anderen Wert des Objekts in der Schleife.C# Oledb Liste von Parametern in einer foreach Schleife hinzufügen

Der Code ist:

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

Ich habe 12 Benutzer aber die Excel-Datei hat 12 Zeilen mit demselben Benutzer. Beispiel:

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

Stattdessen, wenn ich normale Abfrage schreiben wie:

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

Es funktioniert und 12 verschiedene Benutzer in die Datei schreiben. Wie kann ich dieses Problem lösen? Danke und Entschuldigung für mein schlechtes Englisch.

+0

In Ihrem Parameter Beispiel Sie Objektvariable Benutzer verwenden, wo wie auf Ihre Anfrage concatenate Zeichenfolge Variable Unternehmen verwenden. – apomene

Antwort

3

Fügen Sie dieses

cmd.Parameters.Clear(); 

vor

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

Danke. Es funktioniert perfekt – pampua84

1

Sie sind eine neue Reihe von Parametern zu einem Objekt hinzufügen, die bereits eine Reihe von Parametern. Die Abfrage verwendet nur den ersten Satz und überschreibt die anderen, die Sie danach hinzugefügt haben.

Sie müssen die Parameter vor jedem Loop löschen.

Verwendung so etwas wie:

cmd.Parameters.Clear(); 
Verwandte Themen