2017-08-26 45 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();     
相關問題