我正在尝试使用ASP.NET C#向SQL DB插入多个INT的CheckBoxList值。我在我的代码中设置了一个断点并且循环工作但是一旦它获取了第一个选定值,它就会保持该值并导致主键约束。最后,它只插入一个值。经过几天的研究,我的所有研究结果都显示了如何将多个字符串插入SQL DB但没有插入INT。非常感谢任何帮助。
for (int i = 0; i < cbAvailableEntities.Items.Count - 1; i++)
{
SqlConnection con = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand("InsertProjectEntity", con);
using(con)
{
con.Open();
using(cmd)
{
if (cbAvailableEntities.Items[i].Selected)
{
//This code gets the Project ID that is to be associated with the new info
DALSectionAccessData LastProjectID = new DALSectionAccessData(connString);
//This puts the Project ID needed into the variable _pID
int _pID = LastProjectID.GetLastLogReportID();
cmd.CommandType = CommandType.StoredProcedure;
nr.Entities = cbAvailableEntities.SelectedValue;
cmd.Parameters.AddWithValue("@ProjectID", _pID);
cmd.Parameters.AddWithValue("@CorpID", nr.Entities);
cmd.ExecuteNonQuery();
}
}
}
}
这就是错误所说的
&#39; /&#39;中的服务器错误应用
违反PRIMARY KEY约束&#39; PK_ProjectEntity&#39;。不能 在对象&#39; dbo.ProjectEntity&#39;中插入重复键。该声明 已被终止。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.Data.SqlClient.SqlException:违反 PRIMARY KEY约束&#39; PK_ProjectEntity&#39;。无法插入重复 密钥对象&#39; dbo.ProjectEntity&#39;。声明一直如此 终止。
答案 0 :(得分:0)
在循环中,您正在检查if()语句以查看是否选择了Item[i]
,但是如果是,则您没有使用Item[i]
执行任何操作来区分一个迭代与下一个迭代。因此,您为复选框列表中的每个选定项目运行相同的确切代码,而不是为每个项目执行不同的操作。
尝试更改此内容:
cmd.Parameters.AddWithValue("@CorpID", nr.Entities);
这样的事情:
cmd.Parameters.AddWithValue("@CorpID", cbAvailableEntities.Items[i].Value);