我的对象" Uitslag"有一个List属性,如何为该列表中的每个项执行非查询。
以下代码会出现此错误:
类型' System.Data.SqlClient.SqlException'未处理的异常发生在System.Data.dll
中附加信息:变量名称' @ 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();
}
}
}
}
答案 0 :(得分:0)
错误是因为你的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();
}
}
}
}