ADO.NET SQL Serverのホームへ戻る

  SqlDataAdapterUpdate()メソッドでデータベースに反映させたときにDataTableのオートナンバー型のIDを更新するサンプル

 

 

Update()メソッドでデータベースに反映させたときにDataTableのオートナンバー型のIDを更新するサンプル

 

このサンプルは、オートナンバー型のフィールドが存在するDataTableに新規レコードを追加してデータベースに反映するとき、DataTableのオートナンバー型のフィールドを更新します。DataTableRows.Add()メソッドで新規レコードを追加すると、オートナンバー型のフィールド(ID)は自動採番されます。このとき採番されるIDは、DataTableの最終ID+1になります。通常、データベースのテーブルの最終IDDataTableの最終IDは一致している保障がありませんので、DataTableで自動採番されたIDは、あくまでも仮IDになります。DataTableに追加したレコードの本IDは、DataTableをデータベースに反映したときに確定します。仮IDの状態でDataTableのレコードを更新すると、データベースに反映するとき「同時実行違反」のエラーになります。

 

「同時実行違反」のエラーは、次のような処理を行ったときに発生します。

 

    データベースのテーブルをDataTableに取り込む

    DataTableに新規レコードを追加する (自動採番された仮ID=100)

    DataTableをデータベースのテーブルに反映する(本ID=105

    項番②で追加したレコードを変更(ID=100の状態で変更)

    DataTableをデータベースのテーブルに反映する(仮IDと本IDが不一致のため更新不可)

 

項番⑤でDataTableのレコード(ID=100)をデータベースに反映するとき、仮IDでデータベースのテーブルを検索して更新するため、更新対象のレコードが見つかりません。このため、不正に「同時実行違反」のエラーになります。本来、DataTableのレコードをデータベースのテーブルに反映するときは、本ID105を検索して更新する必要があります。

 

このサンプルでは、項番③でDataTableをデータベースのテーブルに反映するときDataTableの仮IDを本IDに更新します。この場合、項番⑤でDataTableをデータベースに反映するとき本IDを使用して更新対象レコードを検索しますので正常に見つかります。

 

このようにデータベースのテーブルにオートナンバー型のフィールドが存在するときは、特別な処理を行う必要があります。

 

このサンプルでは、以下のノウハウを習得することができます。

 

  SQL Serverのデータベースからテーブルを削除する方法 (Drop Table)

  SQL Serverのデータベースにテーブルを作成する方法 (Create Table)

  DataTableを生成してカラム(フィールド)を追加する方法 (New DataTable)

  DataTableにレコードを追加する方法 (NewRow()/Rows.Add)

  DataTableのレコードをデータベースのテーブルに反映する方法 (SqlDataAdapter.Update)

  DataTableのオートナンバー型のIDを更新する方法 (SqlDataAdapter.RowUpdated)

 

ADO.NET SQL Serverのホームへ戻る