2017-08-14 10 views
0

私はC#でPostgreSQL用のパラメータ化されたcommadを作成しようとしています。私の目標はDBテーブルに文字列のリストを書くことです。C#のPostgreSQLのパラメータ化されたクエリ

List<string> list = new List<string> { "listItem1", "listItem2", "listItem3" }; 
command.CommandText = "INSERT INTO table (item) VALUES (@ListItem);"; 
foreach (var item in list) 
    { 
    command.Parameters.AddWithValue("ListItem", item); 
    command.ExecuteNonQuery(); 
    } 

このコードは、dbテーブルに3回書き込まれたlistItem1で終了します。私はParamaterの名前と値を分ける必要があると思うが、どういうことか分からない。助けてもらえますか?ありがとう。

+0

'AddWithValue'が*各反復*に*新しい*パラメータを追加します。あなただけたら、パラメータを宣言する必要があります。 –

+0

foreachループ外のコマンドにパラメータを 'cmd.Parameters.Add(" @ ListItem "、SqlDbType.NVarchar);'として追加し、その値を 'command.Parameters [" @ListItem "]としてループ内に設定する必要があります。値= item; ' –

答えて

0

AddWithValue繰り返しで新しい parapeterを追加します。

List<string> list = new List<string> { 
    "listItem1", "listItem2", "listItem3" }; 

command.CommandText = "INSERT INTO table (item) VALUES (@ListItem);"; 

// Declare parameter once ... 
//TODO: specify parameter's value type as a second argument 
command.Parameters.Add("@ListItem"); 

foreach (var item in list) { 
    // ...use many 
    command.Parameters[0].Value = item; 
    command.ExecuteNonQuery(); 
} 
+0

ありがとうございました。新しいパラメータの定義には、データ型の指定が必要です。 'command.Parameters.Add(" @ Produkt "、NpgsqlTypes.NpgsqlDbType.Varchar);' –

関連する問題