- - PR -
IDENTITYなPrimaryKeyのテーブルをBindingしてレコードを追加したい
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-04-22 17:20
例えば、「番号(IDENTITY)・名前」項目を持つ商品マスターテーブルをDataGridView
に Binding している状態で、追加用の末尾の行の名前項目を入力するとエラーにな ります。 番号がnullのままとのことでした。
僕はてっきり、「番号(IDENTITY)」はレコードを追加する際に、自動的に連番を振 ってくれるために、特に何もしなくて良いと思っていたのですが。 このような場合、どのように書くのが正しい書き方なのでしょうか? | ||||||||
|
投稿日時: 2006-04-22 23:21
DataSetの該当するテーブルの番号列のAutoIncrementはtrueになってますか?
| ||||||||
|
投稿日時: 2006-04-24 15:35
Kazukiさん、いつもありがとうございます。
いえ、なっていませんでした。 そこで、true にしてみたところエラーメッセージの内容が変わりました。 そのメッセージに従って、データベース側の商品番号項目の Is Identity を「いいえ」 にしたところ無事に動くようになりました。 これは、データベース側で連番を振るのではなく、クライアント側で連番を振るとい うことになるのでしょうか? 複数のユーザーで操作した場合に、同じ番号が生成されることはありますか? | ||||||||
|
投稿日時: 2006-04-24 18:13
いや DBのIdentityを外す必要は無いですよ。
DBにテーブル切ってDataSetにドラッグアンドドロップして データソースからフォームにドラッグアンドドロップするだけで R・田中一郎さんが思ってる動きをすると思うんですが… | ||||||||
|
投稿日時: 2006-04-24 18:56
DataGridView での動作は未検証ですが、 DataAdapter の RowUpdated イベントで @@IDENTIFY の値を DataRow に書き戻すと最後に書き込まれた IDENTITY の値が DataRow に設定できます。 これで解決できませんか?
→ 訂正です。このコードは TableAdapter ではなく DataAdapter でした。 Kazuki さんの解説している方法が簡単で便利です。 [ メッセージ編集済み 編集者: k_kazu 編集日時 2006-04-25 10:12 ] | ||||||||
|
投稿日時: 2006-04-24 22:38
DBはもとのままいじらずに
1.DataSetのId列のAutoIncrementをTrue 2.AutoIncrementSeedを-1 3.AutoIncrementStepを-1 こうすると,一意制約違反なんかもおきないし,DBに更新に行った後には 適切なIDが自動で入っていると思います。 どうかな? | ||||||||
|
投稿日時: 2006-04-25 06:39
スキーマもとってこないとダメ、、、って過去にあったような?
Fill と FillSchema (スペルあってる?) 番号が null のままって、変? それって、データベース側のエラー? (ああ、時間が) | ||||||||
|
投稿日時: 2006-04-25 17:33
上記でやると問題なく動きました。 既存のやつだと、どうして駄目なのか見比べてみたいと思います。 ありがとうございました。 |