0

我正在尝试将 C# 中的列表输入到 Access 数据库。但是,当它获得输入时,所有行都具有完全相同的值。我可以在 for each 中进行控制台写入并显示它正在获取正确的值,它只是一遍又一遍地编写相同的内容。任何帮助将不胜感激!!

这是代码和屏幕截图,

    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();
            }
        }
    }

代码的控制台输出

查看数据库中的条目

4

1 回答 1

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();                
于 2017-08-26T15:56:02.817 回答