2017-01-31 11 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

あなたのパラメータの例では、あなたが変数の会社を使用し、あなたのCONCATENATE文字列のクエリのように、オブジェクト変数のユーザーを使用しています。 – apomene

答えて

3

はすでに一連のパラメータを持つオブジェクトにパラメータの新しい範囲を追加している

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

ありがとうございます。それは完全に動作します – pampua84

1

前にこの

cmd.Parameters.Clear(); 

を追加します。 クエリは最初のセットのみを使用しており、その後に追加したものをオーバーライドします。

各ループの前にパラメータをクリアする必要があります。

使用何かのように:

cmd.Parameters.Clear(); 
関連する問題