我正在使用下面的代码更新SQL DB中的一行。循环工作并更新行,但问题是每次循环时,它只更新一个值,其他值被覆盖。因此,最后,它已更新但不是将多个值输入到相应项目ID的表中,而是仅为相应的项目ID放置一个值。我没有收到任何错误。非常感谢任何帮助。
for (int i = 0; i < cbAvailableEntities.Items.Count - 1; i++)
{
SqlConnection connection = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand("UpdateProjectEntity", connection);
using (connection)
{
connection.Open();
using (cmd)
{
if (cbAvailableEntities.Items[i].Selected)
{
cmd.CommandType = CommandType.StoredProcedure;
//the following is the Project ID for the row being updated.
SqlParameter paramPID = new SqlParameter("@ProjectID", nr.ProjectID);
cmd.Parameters.Add(paramPID);
nr.Entities = cbAvailableEntities.Items[i].Value;
cmd.Parameters.AddWithValue("@CorpID", nr.Entities);
cmd.ExecuteNonQuery();
}
}
}
}
以下是存储过程"UpdateProjectEntity"
ALTER PROCEDURE [dbo].[UpdateProjectEntity]
@ProjectID int,
@CorpID int
AS
BEGIN
UPDATE [dbo].[ProjectEntity]
SET
[CorpID] = @CorpID
WHERE
ProjectID = @ProjectID
END
以下是运行程序时输入和结果的屏幕截图。 These are the checkboxes I am saving to the DB
This is the result after I have saved to the DB
我更改了日期以显示该程序中的其他所有内容。
答案 0 :(得分:0)
我可以看到你保存你的恩赐INT
,也许你应该把它保存为逗号分隔字符串。
因此,您可以保存1,2,3
当然,您必须在保存构建之前添加一些逻辑并连接字符串。当您从db执行拆分,
另一个方法是创建一个关系表来指示选择的选项。
但是当您删除选择并添加新选项时,这也会出现问题。
ProjectID CorpID
1 1
1 2
1 3
答案 1 :(得分:0)
我在不对DB进行任何更改的情况下解决此问题的方法是使用DELETE语句删除带有ProjectID的行,然后使用了之前使用过的插入存储过程。它比在已经存在的所有表中创建另一个表要快得多。所以代码看起来像这样
JObject