Строка не удаляется из базы данных. DataGridView & SQLCE - PullRequest
0 голосов
/ 02 ноября 2011

Я пытаюсь удалить выбранную строку из базы данных и DataGridView.

Код ниже, кажется, работает, потому что, если я запускаю программу и удаляю строку, она удаляется из сетки данных. Если я перезагружаю программу, она все равно удаляется из сетки данных. Но, если я просматриваю таблицу с помощью Database Explorer, строка все еще там. Если я обновлю таблицу и перезагрузлю программу, появится удаленная строка.

Есть идеи, почему это происходит?

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 Ответ

1 голос
/ 06 декабря 2011

Используете ли вы BIGINT для своего поля первичного ключа.У меня есть одна таблица, которая использует BIGINT в качестве первичного ключа, и с этим происходят разные странные вещи.

Вы не можете просто обновить, используя средство редактирования таблицы графического интерфейса пользователя SQL Management Studio.Он всегда жалуется, и вам постоянно приходится использовать оператор CAST, чтобы сообщить системе, какие это данные, несмотря на тот факт, что когда вы делаете это, он говорит вам, что это может быть ненужным.BIGINT'S вызывает много задокументированных проблем.

Единственный способ обновить запись в этой таблице - использовать оператор обновления T-SQL.

Вы также можете попробовать отформатировать код следующим образом:

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

конечно, это выдаст ошибку, если будет передан неправильный тип данных, но по крайней мере вы должны знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...