C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: DBでAuto Increment されるIDの取得について


(過去ログ 89 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■52904 / inTopicNo.1)  DBでAuto Increment されるIDの取得について
  
□投稿者/ megumi (1回)-(2010/08/27(Fri) 12:38:33)

分類:[C#] 

C#でサーバー上のMySqlにデータを登録するデスクトップアプリを書いています。
このアプリは複数のPCから同時に登録作業を行える前提です。
データを登録するテーブルではIDがAutoIncrementされます。
データをinsertした後、insertされたデータのIDを取得したいのですが

netで検索すると

1.insert xxxx select scope_identity()のようなsqlをExecuteScalar()を実行する。
2.IDをParameterDirection.InputOutputに設定して ExecuteNonQuery(cmd)を実行する。

上記2つのやり方をみつけました。

1.2のやり方では登録処理が同時に沢山実行された場合に
自分の登録したデータのIDを正しく取得できるでしょうか?

DBを使うプログラムの作成が初めての為、全くわかりません。
排他というかアトミックの処理というか?うまく説明できなくてすみません。
ご存じの方がいらっしゃればお教えください。よろしくお願いいたします。
引用返信 編集キー/
■52921 / inTopicNo.2)  Re[1]: DBでAuto Increment されるIDの取得について
□投稿者/ すなふきぬ (28回)-(2010/08/27(Fri) 22:21:50)
No52904 (megumi さん) に返信
> C#でサーバー上のMySqlにデータを登録するデスクトップアプリを書いています。
> このアプリは複数のPCから同時に登録作業を行える前提です。
> データを登録するテーブルではIDがAutoIncrementされます。
> データをinsertした後、insertされたデータのIDを取得したいのですが
>
> netで検索すると
>
> 1.insert xxxx select scope_identity()のようなsqlをExecuteScalar()を実行する。
> 2.IDをParameterDirection.InputOutputに設定して ExecuteNonQuery(cmd)を実行する。

上記のいずれも、SQL ServerのAutoIncrement値の取得方法です。

MySQLの場合は、

INSERT INTO hoge (VAL) VALUES ('MODE');
SELECT LAST_INSERT_ID();

このようにLAST_INSERT_IDを使用してください。注意することは、INSERT直後に呼び出すことです。
LAST_INSERT_ID()の詳細は、

http://dev.mysql.com/doc/refman/4.1/ja/miscellaneous-functions.html

の中ほどにあるので、目を通して下さい。
引用返信 編集キー/
■52926 / inTopicNo.3)  Re[2]: DBでAuto Increment されるIDの取得について
□投稿者/ megumi (2回)-(2010/08/28(Sat) 00:05:02)
No52921 (すなふきぬ さん) に返信

すなふきぬさん、返信ありがとうございます。
リンクを確認いたしました。
ご指摘のやり方で私のやりたい事が実現できるようです。
助かりました。ありがとうございました。m(_ _)m


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -