将多个checkboxlist值更新到SQL DB asp.net C#

时间:2015-10-07 19:22:35

标签: c# mysql sql asp.net checkboxlist

我正在使用下面的代码更新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"

的SQL查询
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

我更改了日期以显示该程序中的其他所有内容。

2 个答案:

答案 0 :(得分:0)

我可以看到你保存你的恩赐INT,也许你应该把它保存为逗号分隔字符串。

因此,您可以保存1,2,3

,而不是保存1

当然,您必须在保存构建之前添加一些逻辑并连接字符串。当您从db执行拆分,

时,还需要进行一些解析

另一个方法是创建一个关系表来指示选择的选项。

但是当您删除选择并添加新选项时,这也会出现问题。

ProjectID   CorpID
   1          1
   1          2
   1          3

答案 1 :(得分:0)

我在不对DB进行任何更改的情况下解决此问题的方法是使用DELETE语句删除带有ProjectID的行,然后使用了之前使用过的插入存储过程。它比在已经存在的所有表中创建另一个表要快得多。所以代码看起来像这样

JObject