Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
dimaignatuhin
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 78
1

Обновление первичного ключа после выполнения запроса

10.05.2016, 18:57. Просмотров 334. Ответов 2
Метки нет (Все метки)

У меня в классе есть такой метод:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void Delete(int id)
        {
            using (SqlCeConnection cn = new SqlCeConnection(@"Data Source=C:\Users\admin\documents\visual studio 2010\Projects\SecurityC\SecurityC\SecurityC.sdf"))
            {
                try
                {
                    cn.Open();
                    SqlCeCommand cmds = new SqlCeCommand("DELETE FROM accounts WHERE id='"+id+"'", cn);
                    cmds.ExecuteNonQuery();
                }
                catch (SqlCeException ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    cn.Close();
                }
            }
        }
к примеру в базе у меня 10 записей и если я удалю седьмую запись то в базе у меня логично что уже записи с идом 7 уже не будет, вот как бы сделать так что бы у меня первичный ключ автоматически обновлялся после запроса DELETE в базе данных ? я попробывал вот так сделать
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public void Update_PK()
        {
            int count = 0;
            int count_pk = 1;
            using (SqlCeConnection cn = new SqlCeConnection(@"Data Source=C:\Users\admin\documents\visual studio 2010\Projects\SecurityC\SecurityC\SecurityC.sdf"))
            {
                try
                {
                    cn.Open();
                    SqlCeCommand cmds = new SqlCeCommand("SELECT count(id) FROM accounts", cn);
                    rdr = cmds.ExecuteReader();
                    while (rdr.Read())
                    {
                        count = Convert.ToInt32(rdr.GetValue(0));
                        for (int i = 0; i < count; i++)
                        {
                            //MessageBox.Show(String.Format("count: {0} count_pk: {1} i: {2}", count, count_pk, i));
                            SqlCeCommand cmd = new SqlCeCommand("UPDATE accounts SET id= '" + count_pk + "'WHERE id='" + i + "'", cn);
                            cmd.ExecuteNonQuery();
                            count_pk++;
                        }
                    }
                }
                catch (SqlCeException ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    cn.Close();
                }
            }
        }
но опять же при обновлении айдишников выскакивает ошибка что такой айди уже существует т.к. записи обновляются по очереди, вообще не знаю что делать, помогите.

P.S. кто не понял я хочу что бы после DELETE у меня айдишники автоматически обновлялись и были по очереди в базе записаны один за одним а не например 1,2,3,4,5,7,8,9,11,12
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2016, 18:57
Ответы с готовыми решениями:

Извлечение первичного ключа
Уважаемы форумчане! Подскажите пожалуйста, как извлечь первичный ключ одной...

Получение первичного ключа
Не могу найти решения следующего вопроса. У меня имеется таблица, где id...

Изменение значения первичного ключа
В таблице БД есть первичный ключ ProductID, который вручную не изменяется, при...

EF и Ошибка при изменении первичного ключа
Использу EF Code first. Есть сущность с составным ключом. В ключе 3 поля, и ни...

Получение Первичного ключа внесенной записи
Здраствуйте!! Подскажите пожалуйста как вернуть первичный ключ внесенной...

2
Tessio
68 / 77 / 42
Регистрация: 12.05.2015
Сообщений: 330
Завершенные тесты: 1
11.05.2016, 00:14 2
dimaignatuhin, а для чего? Если у вас там автоинкремент, то не сделаете, да и незачем.
0
kolorotur
Эксперт .NET
10614 / 8795 / 2194
Регистрация: 17.09.2011
Сообщений: 15,067
Завершенные тесты: 1
11.05.2016, 14:03 3
Цитата Сообщение от dimaignatuhin Посмотреть сообщение
кто не понял я хочу что бы после DELETE у меня айдишники автоматически обновлялись и были по очереди в базе записаны один за одним а не например 1,2,3,4,5,7,8,9,11,12
Не надо так делать.
Первичный ключ нужен для одной-единственной цели: определять уникальную запись в базе.
Уникальность включает в себя все когда-либо созданные записи, даже те, которые потом были удалены.
За предыдущие поколения уже столько шишек себе набили из-за повторного использования первичного ключа, что вышесказанное можно считать заповедью.

Если вам нужно значение для относительной сортировки, то создайте для этого отдельную колонку.
Если вам нужно указывать номер строки при выборке данных, то просто добавляйте его при обходе результата или попросите базу добавить порядковый номер к каждой строке (конкретная команда зависит от СУБД). Обратите внимание, что если в запросе отсутствует сортировка, то база может вернуть строки в произвольном порядке.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2016, 14:03

Добавить строку в БД без первичного ключа
Есть таблица с двумя столбцами: - id - первичный ключ - value - значение int...

Входит ли колонка в состав первичного ключа
Доброго времени суток всем! Бьюсь над, казалось бы, простой задачей уже третий...

Не удаляется запись из таблицы. Нет первичного ключа
Доброго времени суток. Возникла такая проблема: есть 3 таблицы Library { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru