【问题标题】:c# how do I execute a non query for each item in a list?c#如何对列表中的每个项目执行非查询?
【发布时间】:2017-06-28 21:52:25
【问题描述】:

我的对象“Uitslag”有一个 List 属性,我如何对该列表中的每个项目执行非查询。

下面的代码给出了这个错误:

System.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的未处理异常

附加信息:变量名称“@Partij_ID”已被声明。变量名称在查询批处理或存储过程中必须是唯一的。

 public void AddUitslag(Uitslag uitslag)
    {
        using (SqlConnection connection = Database.Connection)
        {
            VerkiezingRepository VerkiezingRepo = new VerkiezingRepository(new SQLVerkiezingContext());
            string query = "Insert into Uitslag(Naam, Datum, Verkiezing_ID, Partij_ID) values (@Naam, @Datum, @Verkiezing, @Partij_ID)";

            using (SqlCommand command = new SqlCommand(query, connection))
            {
                command.Parameters.AddWithValue("@Naam", uitslag.Naam);
                command.Parameters.AddWithValue("@Datum", uitslag.Datum);
                command.Parameters.AddWithValue("@Verkiezing",  VerkiezingRepo.GetVerkiezing(uitslag.Verkiezing.Naam).ID);

                foreach (Partij p in uitslag.DeelnemendePartijen)
                {
                    command.Parameters.AddWithValue("@Partij_ID", p.Afkorting);

                    command.ExecuteNonQuery();
                }
            }
        }
    }

【问题讨论】:

  • 该错误是因为您的 foreach 循环创建了多个具有相同名称的参数,这是不允许的。您想为每个项目“p”运行一个 INSERT 吗?如果是这样,请将您声明存储库的所有代码附在 foreach 中。
  • @ADyson 它不一定是 foreach 循环,但我认为它会工作
  • 抱歉修改了我的评论,见上文。
  • @ADyson 成功了,谢谢!
  • 我已将其添加为答案,如果您将其标记为已接受的答案,我将不胜感激(它对未来的读者很有用) - 谢谢 :-)

标签: c# sql database visual-studio


【解决方案1】:

错误是因为你的foreach循环在同一个SqlCommand中创建了多个同名参数,这是不允许的。即使您多次执行它,它仍然是同一个 SqlCommand 对象,您只需继续添加它。

如果您想为每个项目“p”运行一个 INSERT,则在 foreach 中声明存储库后附上所有代码:

public void AddUitslag(Uitslag uitslag)
 {
   using (SqlConnection connection = Database.Connection)
   {
        VerkiezingRepository VerkiezingRepo = new VerkiezingRepository(new SQLVerkiezingContext());
        foreach (Partij p in uitslag.DeelnemendePartijen)
        {
            string query = "Insert into Uitslag(Naam, Datum, Verkiezing_ID, Partij_ID) values (@Naam, @Datum, @Verkiezing, @Partij_ID)";

            using (SqlCommand command = new SqlCommand(query, connection))
            {
                command.Parameters.AddWithValue("@Naam", uitslag.Naam);
                command.Parameters.AddWithValue("@Datum", uitslag.Datum);
                command.Parameters.AddWithValue("@Verkiezing",  VerkiezingRepo.GetVerkiezing(uitslag.Verkiezing.Naam).ID);

                command.Parameters.AddWithValue("@Partij_ID", p.Afkorting);

                command.ExecuteNonQuery();
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多