- PR -

TableAdapterで、IDENTITYがある2つのテーブルの挿入をしたい。

1
投稿者投稿内容
dye
会議室デビュー日: 2007/01/30
投稿数: 7
投稿日時: 2007-01-30 13:23
こんにちは。

開発環境:VS2005, SQL Server2005, C#

データソースからドラッグドロップしたリンクされた2つのテーブルで、
IDENTITYを伴った挿入をしたいのです。

Orders(ID,...) IDはIDENTITY  (帳票形式) 
LineItems(ID, OrderID, ...)  (表形式)

private void INSERT_Click(object sender, EventArgs e)
{
this.OrdersTableAdapter.Update(this.DataSet1.Orders);
this.LineItemsTableAdapter.Update(this.DataSet1.LineItems);
}

クライアント側で仮採番されたMAX+1番号だとINSERTは成功するのですが、
OrdersのID番号がずれた場合、LineItemsが制約違反で挿入できません。

例)仮採番されたID=100が、他のユーザーがOrdersに新しい一行が挿入し、
削除した場合、Orders.ID = 101となり、
LineItems.OrderID = 100で制約違反が発生します。

普通に登録できる方法があるのでしょうか?


よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2007-01-30 15:17
> 例)仮採番されたID=100が、他のユーザーがOrdersに新しい一行が挿入し、
> 削除した場合、Orders.ID = 101となり、
> LineItems.OrderID = 100で制約違反が発生します。
すみません、この例がいまいち理解しづらかったので予想となりますが、
SQL Server側で自動採番するようするか、トランザクション制御を行うことで
解決できそうな気がします。

[ メッセージ編集済み 編集者: よこけん 編集日時 2007-01-30 15:28 ]
dye
会議室デビュー日: 2007/01/30
投稿数: 7
投稿日時: 2007-01-31 10:09
よこけんさんへ

ありがとうございます。

SQL Server側で自動採番しているのですが、
子レコードに親レコードのIDが更新されないパターンがあるので、
困ってました。

とりあえず、子レコードのDataGridViewのEnterで、
親レコードをUPDATEしてIDを確定することで逃げました。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)