未从数据库中删除的行.DataGridView,SQLCE

本文关键字:DataGridView SQLCE 删除 数据库 | 更新日期: 2023-09-27 18:13:33

我试图从数据库和DataGridView中删除选定的行。

下面的代码似乎可以工作,因为如果我启动程序并删除该行,它将从数据网格中删除。如果我重新加载程序,它仍然从数据网格中删除。但是,如果我使用数据库资源管理器查看表,该行仍然在那里。如果我刷新表并重新加载程序,将出现已删除的行。

知道为什么会这样吗?

private void button1_Click(object sender, EventArgs e)
    {
        Int32 selectedRowCount = dataAccounts.Rows.GetRowCount(DataGridViewElementStates.Selected);
        if (selectedRowCount > 0)
        {
            using (SqlCeConnection c = new SqlCeConnection(Properties.Settings.Default.snogAccountsConnectionString))
            {
                c.Open();
                for (int i = 0; i < selectedRowCount; i++)
                {
                    using (SqlCeCommand com = new SqlCeCommand("DELETE FROM accounts WHERE id = (@id)", c))
                    {
                        com.Parameters.AddWithValue("@id", dataAccounts.SelectedRows[i].Cells["userID"].Value);
                        com.ExecuteNonQuery();
                    }
                    dataAccounts.Rows.RemoveAt(i);
                }
            }
        }
        else
        {
            MessageBox.Show("Select some rows to delete.");
        }
    }

未从数据库中删除的行.DataGridView,SQLCE

您是否使用BIGINT作为主键字段?我有一个表,它使用BIGINT作为主键,各种奇怪的事情都会发生。

您不能仅仅使用SQL Management Studio GUI编辑表功能进行更新。它总是抱怨,而您必须不断地使用CAST语句来告诉系统它是什么类型的数据,尽管当您这样做时,它会告诉您这可能是不必要的。BIGINT会导致很多文档中的问题。

我可以更新该表中记录的唯一方法是使用update T-SQL语句。

您也可以尝试这样格式化代码:

                using (SqlCeCommand com = new SqlCeCommand("DELETE FROM accounts WHERE id ="+ dataAccounts.SelectedRows[i].Cells["userID"].Value.ToString(), c))
                {
                    com.ExecuteNonQuery();
                }

当然,如果传递的数据类型不正确,这将抛出错误,但至少您应该知道。