SQL Server +删除多个ID

时间:2012-12-15 17:44:38

标签: c# sql

我想找出一个好方法去删除ID的复选框,如下所示,插入,我使用的是SqlBulkCopy,但我认为没有类似的删除类。我现在只能想到如果选中复选框但却不确定它是否是最好的方法,对foreach行的最大计数大约为15,也可以包含1的事务回滚。删除1?感谢。

 protected void DeleteMsg_Click(object sender, EventArgs e)
        {
            UserBLL userBll = new UserBLL();

            foreach (GridViewRow row in uigvUserInbox.Rows)
            {
                CheckBox chkSelected = (CheckBox)row.FindControl("chkSelect");

                if (chkSelected.Checked)
                {
                    try
                    {
                      //  DataKey currentDataKey = uigvUserInbox.DataKeys[row.DataItemIndex];
                      //  userBll.DeleteMessage(currentDataKey.Value.ToString()); // SQL delete 
                    }
                    catch (Exception ex)
                    {
                        // clsLogging logError = new clsLogging();
                        // logError.WriteLog(ex);
                    }
                }
            }
        }

2 个答案:

答案 0 :(得分:1)

将适当的方法添加到UserBLL类,该类使用where yourMappedIDColumn in (here is the comma separated list of dataKeys)

在SQL端执行删除
class UserBLL
{
    internal void DeleteMessages(List<DataKey> dataKeysToDelete)
    {
        //delete from tableName where Id in dataKeysToDelete
    }
}

检索变量中的所有数据键并将其传递给上面的metod。

protected void DeleteMsg_Click(object sender, EventArgs e)
{
    UserBLL userBll = new UserBLL();

    List<DataKey> dataKeysToDelete = new List<DataKey>();

    foreach (GridViewRow row in uigvUserInbox.Rows)
    {
        CheckBox chkSelected = (CheckBox)row.FindControl("chkSelect");

        if (chkSelected.Checked)
        {

            dataKeysToDelete.Add(uigvUserInbox.DataKeys[row.DataItemIndex]);
        }
    }
    try
    {
        userBll.DeleteMessages(dataKeysToDelete);
    }
    catch (Exception ex)
    {
        // clsLogging logError = new clsLogging();
        // logError.WriteLog(ex);
    }
}

答案 1 :(得分:0)

您可以使用In子句

从表中删除,其中id为(id1,id2,id3)

这只需要一个查询。