0

Я использую SQL Server Express и VS2008.Загрузить пустую таблицу базы данных

У меня есть база данных с таблицей A, которая имеет столбец ID как IDENTITY. Идентификатор автоматически увеличивается. Даже если строка удалена, ID все равно увеличивается.

После нескольких манипуляций данными текущий ID достиг, например, 15.

При запуске приложения

  • , если есть по крайней мере одна строка: если добавить новую строку, новый идентификатор 16. Все в порядке.
  • Если таблица пуста (без строки): если я добавляю новую строку, новый идентификатор равен 0, что является ошибкой (я думаю).

И дальнейшее манипулирование данными (например, удаление или обновление) приведет к необработанному исключению.

С кем это столкнулось?

PS. В моем определении таблицы, идентификатор был выбран следующим образом:

Identity Increment = 1; Identity Seed =1; 

Код нагрузки БД:

dataSet = gcnew DataSet(); 

dataAdapter->Fill(dataSet,"A"); 

dataTable=dataSet->Tables["A"]; 

dbConnection->Open(); 

Update метод Кнопка

dataAdapter->Update(dataSet,"tblInFlow"); 

dataSet->AcceptChanges(); 

dataTable=dataSet->Tables["tblInFlow"]; 

dataGrid->DataSource=dataTable; 

Если я нажимаю Update :

  • , если есть хотя бы строка: представление datagrid обновляется и правильно показывает таблицу.

  • Если в таблице нет ни одной строки данных, метод Add добавит новую строку, но из ID 0. Если я закрою программу и перезагрузите ее снова: идентификатор будет 16, что верный.

Это метод добавить

row=dataTable->NewRow(); 

row["column1"]="something"; 

dataTable->Rows->Add(row); 

dataAdapter->Update(dataSet,"A"); 

dataSet->AcceptChanges(); 

dataTable=dataSet->Tables["A"]; 
+0

Можете ли вы показать определение таблицы и код, который добавляет новую строку, когда таблица пуста? Похоже, что либо таблица изначально не посеяна правильно, либо вы вручную заново ее высеваете. Если идентификатор должен начинаться с 1, конфигурация должна быть 'IDENTITY (1,1)', и поэтому вы не должны получать 0, если ничего не происходит. Поэтому вам нужно предоставить дополнительную информацию. –

+0

Я думаю, что при объявлении столбца идентификатора u нужно указать значение семени и приращения, например CREATE TABLE dbo.MyTable (ID int identity (1,1), Name varchar (20)) – praveen

+0

Pls посмотрел на мой выше отредактированный вопрос , Спасибо. –

ответ

1

При удалении даты с помощью

Delete from myTable 

Он не сбросит столбец идентификаторов, но с другой стороны, если ваш усечения стол то он сбрасывает все столбцы идентификаторов по умолчанию по умолчанию (в вашем случае, начиная с 1) Если вы обрезаете таблицу и затем ее повторно загрузите, первое значение повторения идентификатора будет b е 0, если вы пишете

DBCC CHECKIDENT(MyTable, RESEED, 0) 

Даже если ваш столбец идентификации определен как идентичность = 1 и семя = 1, первый ряд вставленного начать с Id = 0

Если вы хотите начать с 1, то вам нужно повторно заполнить столбец как

DBCC CHECKIDENT(MyTable, RESEED, 1) 
+0

Здравствуйте, моя проблема в том, что: иногда загруженная таблица не очень хорошая, если она успешна, если идентификатор достиг 200, новый вставленный элемент должен быть неважно, сколько элементов в списке. Но иногда, если идентификатор максимального элемента равен 105, новый вставленный элемент равен 106 вместо 201. Это происходит просто «иногда», –