2017-08-26 4 views
0

C#からAccessデータベースにリストを入力しようとしています。しかし、入力を取得すると、すべての行がまったく同じ値になります。私はそれぞれのためのコンソール書き込みを行うことができ、それが正しい値を得ていることを示して、それは何度も何度も同じことを書いているだけです。どんな助けでも大歓迎です!!ここでc#foreachを使用してリストからアクセスデータベースにデータを入力すると、すべての行に値が重複します。

はパラメータでSQLを使用する文字列を作成する場合は、コマンドパラメータ名として?使用していません

public static void BuildMerakiTemplateList(string client, IList<MerakiApi.ConfigTemplates> templateList) 
    { 
     using (
      var conn = 
       new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;" + 
            @"Data Source=" + UniversalVariables.ConfigShare + @"CustomerLanInfo.accdb") 
     ) 
     { 
      OleDbCommand cmd = null; 
      cmd = new OleDbCommand("INSERT into [Meraki Templates](ClientID, TemplateName, TemplateID) values (?, ?, ?)", conn); 
      conn.Open(); 
      foreach (MerakiApi.ConfigTemplates template in templateList) 
      { 
       Console.WriteLine(template.name + " " + template.id); 
       cmd.Parameters.Add("@ClientID", OleDbType.VarChar).Value = client; 
       cmd.Parameters.Add("@TemplateName", OleDbType.VarChar).Value = template.name; 
       cmd.Parameters.Add("@TemplateID", OleDbType.VarChar).Value = template.id; 
       cmd.ExecuteNonQuery(); 
      } 
     } 
    } 

Console output of code

View of entries in database

+0

のみ内部パラメータ値を割り当て、その後、ループの外に一度のパラメータを作成し、追加を。今のように、多くのパラメータを作成しますが、最初の3つだけが使用され、もちろん、すべてのコマンド実行で同じ値が使用されます。 –

+1

@IvanStoevそれはまさにLOLだったのですが、私が質問を送った後、私は何をしているのか分かり、頭を振るだけでした。ご協力ありがとうございました。 –

答えて

0

、コードやスクリーンショットです@paramName - @の記号を

として渡す必要があります。その後

、あなたはコマンドパラメータを追加するとき、あなたは wintout @記号のパラメータを追加します

cmd.Parameters.Add("ClientID", OleDbType.VarChar).Value = client; 
cmd.Parameters.Add("TemplateName", OleDbType.VarChar).Value = template.name; 
cmd.Parameters.Add("TemplateID", OleDbType.VarChar).Value = template.id; 
cmd.ExecuteNonQuery();     
関連する問題