不从数据库中删除行。 DataGridView& SQLCE

时间:2011-11-02 18:34:37

标签: c# sql

我正在尝试从数据库和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.");
        }
    }

1 个答案:

答案 0 :(得分:1)

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

您不能只使用SQL Management Studio GUI编辑表工具进行更新。它总是抱怨,你经常不得不使用CAST语句来告诉系统它是什么类型的数据,尽管你这样做时告诉你这可能是不必要的。 BIGINT导致许多记录在案的问题。

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

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

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

当然,如果传递了错误的数据类型,这将引发错误,但至少你应该知道。

相关问题