0

SQL Server Express と VS2008 を使用しています。

Aの列を持つIDテーブルを持つデータベースがありますIDENTITY。ID は自動インクリメントされます。行が削除されても、IDまだ増加します。

いくつかのデータ操作の後ID、たとえば現在の値は 15 に達しました。

アプリケーションを実行すると

  • 少なくとも 1 行ある場合: 新しい行を追加すると、新しい ID は 16 になります。すべて問題ありません。
  • テーブルが空 (行なし) の場合: 新しい行を追加すると、新しい ID は 0 になり、エラーになります (と思います)。

さらにデータ操作 (削除や更新など) を行うと、未処理の例外が発生します。

誰かがこれに遭遇しましたか?

PS。私のテーブル定義では、ID は次のように選択されています。

Identity Increment = 1; Identity Seed =1;

DB ロード コードは次のとおりです。

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;

更新を押すと:

  • 少なくとも行がある場合: データグリッド ビューが更新され、テーブルが正しく表示されます。

  • テーブルに何もない (データ行がない) 場合、Add メソッドは新しい行を追加しますが、ID 0 から追加します。プログラムを閉じてもう一度再起動すると、ID は 16 になります。これは正しいです。

これが追加方法です

row=dataTable->NewRow();

row["column1"]="something";

dataTable->Rows->Add(row);

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

dataSet->AcceptChanges();

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

1 に答える 1

1

を使用して日付を削除する場合

 Delete from myTable

ID列はリセットされませんが、テーブルを切り捨てると、ID列がデフォルトのシード値にリセットされます(この場合は1から始まります)。テーブルを切り捨ててから再シードする場合、最初の次のように書くと、identity reseed 値は 0 になります

 DBCC CHECKIDENT(MyTable, RESEED, 0)

ID 列が Identity=1 および seed =1 として指定されていても、挿入される最初の行は Id=0 から始まります

1 から開始する場合は、列を次のように再シードする必要があります。

 DBCC CHECKIDENT(MyTable, RESEED, 1)
于 2012-06-04T04:22:56.930 に答える