トップ回答者
DataGridView で auto increment させている primary key が負になるのは仕様?

質問
-
id を primary key とする以下のようなテーブルを用意しました。
----
id int not null
name varchar(50) not null
----id は auto increment させます。これを DataGridView に割り当ててデータを
挿入していくと、id が編集時に負の値となります。一旦保存をすると正の値に
なるのですが、これは正常なのでしょうか? 未確定の id が編集中に取る値と
してはまずくはないと思いますので、なんて問題ないと考えていますが。通常のアプリケーションでは id コラムは Visible = false にする予定ですの
で、見えはしないのですが、この値の取り方が Windows でのやり方なのか判断
がつきません。ご存知の方お教え願えないでしょうか。
念のため、動画も用意しときましたので、ご確認ください。URL http://custar.s151.xrea.com/videos/datagridview/datagridview.html
動画の中では、テーブルに予め保存しておいた A, B の後に C, D を入力して
います。その際、id が -1, -2 となっています。1 A
2 B
-1 C
-2 D
回答
すべての返信
-
なぜ負の値になっているかというと、DB 更新時に競合しなくなるためだと思います。(DB 更新時の技ですね)
詳しくは「@@IDENTITY クライシスを管理する]」の初めから「ADO.NET での 「コツ」」くらいまでを呼んでいただけるとわかるかと思います。レコードを新規作成する際に DB にインクリメントされた値を取得しに行かなくてもいいメリットもありますね。
で、この動きが仕様かと聞かれるとそういったドキュメントを見つけることが出来ませんでした。
こちらで DataColumn の AutoIncrement プロパティを True にして、その列を主キーにしてみましたが、 AutoIncrementStep プロパティがマイナスになることはありませんでした。しかしどこかのタイミングで AutoIncrementStep プロパティの値が -1 になっているところがあるのだと思います。
TableAdapter などを使用しているのであれば、その処理の中にあるかもしれません。