@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

プログラミングには採番のIDをどのように取得しますか

1
投稿者投稿内容
未記入
会議室デビュー日: 2005/01/21
投稿数: 3
投稿日時: 2005-01-21 12:11
はじめまして。
初めて投稿です。
宜しくお願いします。

SQL Serverのテーブルに主キーを自動採番トリガを追加しました。
C#のプログラミングにはどのようにトリガをコールして、自動採番のキーのValueを取得しますか。


mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2005-01-21 12:24
msoです。

引用:

SQL Serverのテーブルに主キーを自動採番トリガを追加しました。
C#のプログラミングにはどのようにトリガをコールして、自動採番のキーのValueを取得しますか。



いまいちよくわからないのですが、トリガというのは
ストアドのプログラムのことですか?
それともDBトリガ?

C#からストアドを起動させる方法であれば
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=18243&forum=7&3
を参考にしていただければ解決することが
できると思います。(↑ではVB.NETですからC#に変換して読んでください)
Os_
ベテラン
会議室デビュー日: 2003/04/16
投稿数: 77
投稿日時: 2005-01-21 13:26
Osです。

ストアドプロシージャ内で取得するのであれば、
INSERT ステートメント終了直後に以下のステートメントを実行することで、
取得できます。

SELECT @ID = SCOPE_IDENTITY()

ストアドプロシージャからの戻り値はmsoさんが指摘されている方法で可能です。
vincent
大ベテラン
会議室デビュー日: 2004/07/09
投稿数: 142
投稿日時: 2005-01-21 13:43
C#のプログラム内でIDを取りたい場合は
INSERTステートメントを実行した直後に

"SELECT @@IDENTITY"

でデータを取得すると、採番されたIDが取れます。
未記入
会議室デビュー日: 2005/01/21
投稿数: 3
投稿日時: 2005-01-21 14:25
ご返事ありがとうございます。
説明はちょっと不足です。
もう一度、詳しく説明いたします。

こちらで作成している画面には複数物件に対して、追加、更新、削除出来ます。
画面には「保存」ボタンを押すと画面のデータをDBに更新します。
画面に物件を追加して、該物件に対して、設定などの操作もあります。
この場合、該物件のキーを設定しなければなりません。
キーはDBに追加した場合、DBトリガで自動的に採番して、設定しますから。
保存する前に仮キーを設定出来ますけど、
データベースに保存する時、追加とか、更新とか区別、ちょっと面倒ですよね。
解決のいい方法を教えくださいませんか。

お手数掛けまして、申し訳ございません。
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2005-01-21 14:45
msoです。

引用:

こちらで作成している画面には複数物件に対して、追加、更新、削除出来ます。
画面には「保存」ボタンを押すと画面のデータをDBに更新します。
画面に物件を追加して、該物件に対して、設定などの操作もあります。
この場合、該物件のキーを設定しなければなりません。
キーはDBに追加した場合、DBトリガで自動的に採番して、設定しますから。
保存する前に仮キーを設定出来ますけど、
データベースに保存する時、追加とか、更新とか区別、ちょっと面倒ですよね。
解決のいい方法を教えくださいませんか。



<心の声>つまり、自分で考えるのが面倒ってことなのですか?</心の声>

具体的に何をやりたいのかよくわからないのですが、
プライマリキーでselectして、存在すればUPDATE
存在しなければINSERTってやればいいのではないでしょうか?

んで、そういう処理をあっちこっちでやりたいのであれば
そういうストアドとかを作成してストアドで全部処理をやるように
するとかすればいいんじゃないのでしょうか?

あとよくわからないのですが、
引用:

データベースに保存する時、追加とか、更新とか区別、ちょっと面倒ですよね。


区別ってなんですか?

全体的に何をしたいのか伝わってきません。
共通部品のようなものを作ることがしたいのですか?
それとも一画面のロジックを考えていますか?

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-01-21 22:32
DataTableに格納したデータを直に触るなら、DbDataAdapter.Updateメソッドで勝手にINSERTとUPDATEを振り分けてくれる。INSERTしたデータのIDを、同じ時期にINSERTするデータに参照させる必要がないなら、これでよい。

参照させる必要があるなら、前もってSEQUENCEなどを使って発行する。

飛び番を作りたくないなら、仮IDとテンポラリテーブル、ストアドプロシージャを使って一括INSERT後に取得するという方法もあるけど、説明が面倒なのでやめ。

_________________
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2005-01-22 06:48
引用:

SQL Serverのテーブルに主キーを自動採番トリガを追加しました。
C#のプログラミングにはどのようにトリガをコールして、自動採番のキーのValueを取得しますか。


SQL Server, Oracleなどはストアドプロシージャに出力パラメータを追加して
取得します。Access, MySQLの場合は、DataAdapterのRowUpdatedイベントで取得
します。

詳しくは、下記リンクをクリックしてください。

http://tinyurl.com/5qqlb

_________________
ASP.NETサンプル集(Web Matrix版)

[ メッセージ編集済み 編集者: Access 編集日時 2005-01-22 08:26 ]
1

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