2017-08-26 16 views
0

我试图从C#输入列表到Access数据库。但是,当它获得输入时,所有行都具有完全相同的值。我可以在每个控制台中编写一个控制台,并显示它正在获取正确的值,它只是反复写入相同的内容。任何帮助将不胜感激!!c#从列表中输入数据到Access数据库与foreach结果在所有行中的重复值

下面是代码和截图,

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这正是我所说的那个问题,在我提出问题之后,我意识到自己在做什么,只能摇头。感谢您的帮助。 –

回答

0

当创建一个字符串使用一个带参数的SQL,您不要使用?用作命令参数名称,您需要通过@paramName - 与@签署:

cmd = new OleDbCommand("INSERT into [Meraki Templates](ClientID, TemplateName, TemplateID) values (@ClientID, @TemplateName, @TemplateID)", conn); 

然后,当您添加的命令参数,您添加参数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();     
相关问题