0

我正在使用SQL Server Express和VS2008。加載空數據庫表

我有一個數據庫與表A,它有一列IDIDENTITY。該ID是自動遞增的。即使該行被刪除,ID仍會增加。

經過多次數據處理後,當前的ID已達到15個,例如。

當我運行應用程序

  • ,如果有至少1行:如果我添加一個新行,新的ID是16。一切都很好。
  • 如果表爲空(無行):如果我添加一個新行,新的ID是0,這是一個錯誤(我認爲)。

進一步的數據操作(例如刪除或更新)將導致未處理的異常。

有沒有人遇到過這個?

PS。在我的表定義中,ID已被選定爲:

Identity Increment = 1; Identity Seed =1; 

數據庫負載代碼:

dataSet = gcnew DataSet(); 

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

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

dbConnection->Open(); 

更新按鈕方法

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

dataSet->AcceptChanges(); 

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

dataGrid->DataSource=dataTable; 

如果我按更新:

  • 如果至少有一行:datagrid視圖更新並正確顯示錶。

  • 如果表中沒有任何數據行(無數據行),則Add方法將添加一個新行,但來自ID 0. 如果關閉程序並重新啓動它:ID將爲16,即正確。

這是add方法

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

我想在聲明一個身份列時,你需要指定種子和增量值,例如CREATE TABLE dbo.MyTable(ID int identity(1,1),Name varchar(20)) – praveen

+0

請看看我上面編輯的問題。謝謝。 –

回答

1

如果要刪除使用

Delete from myTable 

它不會重置標識列,但在另一方面,如果你截斷表的日期那麼它會將任何標識列重置爲默認種子值(在你的情況下,從1開始) 如果你正在截斷表,然後重新播種它,第一個身份重設值將會是b Ë0,如果你寫

DBCC CHECKIDENT(MyTable, RESEED, 0) 

即使你的身份列指定標識= 1和種子= 1,插入第一個行會從開始的Id = 0

如果你想從開始1那麼你需要重新設置列爲

DBCC CHECKIDENT(MyTable, RESEED, 1) 
+0

你好,我的問題是:有時候加載的表格不好,如果成功,如果ID已達到200,新插入的項目應該是201無論多少項目在列表中。但有時如果最大項目的ID是105,則新插入的項目是106而不是201.這發生在「有時」 –