- - PR -
プログラミングには採番のIDをどのように取得しますか
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-01-21 12:11
はじめまして。
初めて投稿です。 宜しくお願いします。 SQL Serverのテーブルに主キーを自動採番トリガを追加しました。 C#のプログラミングにはどのようにトリガをコールして、自動採番のキーのValueを取得しますか。 | ||||||||
|
投稿日時: 2005-01-21 12:24
msoです。
いまいちよくわからないのですが、トリガというのは ストアドのプログラムのことですか? それともDBトリガ? C#からストアドを起動させる方法であれば http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=18243&forum=7&3 を参考にしていただければ解決することが できると思います。(↑ではVB.NETですからC#に変換して読んでください) | ||||||||
|
投稿日時: 2005-01-21 13:26
Osです。
ストアドプロシージャ内で取得するのであれば、 INSERT ステートメント終了直後に以下のステートメントを実行することで、 取得できます。 SELECT @ID = SCOPE_IDENTITY() ストアドプロシージャからの戻り値はmsoさんが指摘されている方法で可能です。 | ||||||||
|
投稿日時: 2005-01-21 13:43
C#のプログラム内でIDを取りたい場合は
INSERTステートメントを実行した直後に "SELECT @@IDENTITY" でデータを取得すると、採番されたIDが取れます。 | ||||||||
|
投稿日時: 2005-01-21 14:25
ご返事ありがとうございます。
説明はちょっと不足です。 もう一度、詳しく説明いたします。 こちらで作成している画面には複数物件に対して、追加、更新、削除出来ます。 画面には「保存」ボタンを押すと画面のデータをDBに更新します。 画面に物件を追加して、該物件に対して、設定などの操作もあります。 この場合、該物件のキーを設定しなければなりません。 キーはDBに追加した場合、DBトリガで自動的に採番して、設定しますから。 保存する前に仮キーを設定出来ますけど、 データベースに保存する時、追加とか、更新とか区別、ちょっと面倒ですよね。 解決のいい方法を教えくださいませんか。 お手数掛けまして、申し訳ございません。 | ||||||||
|
投稿日時: 2005-01-21 14:45
msoです。
<心の声>つまり、自分で考えるのが面倒ってことなのですか?</心の声> 具体的に何をやりたいのかよくわからないのですが、 プライマリキーでselectして、存在すればUPDATE 存在しなければINSERTってやればいいのではないでしょうか? んで、そういう処理をあっちこっちでやりたいのであれば そういうストアドとかを作成してストアドで全部処理をやるように するとかすればいいんじゃないのでしょうか? あとよくわからないのですが、
区別ってなんですか? 全体的に何をしたいのか伝わってきません。 共通部品のようなものを作ることがしたいのですか? それとも一画面のロジックを考えていますか? | ||||||||
|
投稿日時: 2005-01-21 22:32
DataTableに格納したデータを直に触るなら、DbDataAdapter.Updateメソッドで勝手にINSERTとUPDATEを振り分けてくれる。INSERTしたデータのIDを、同じ時期にINSERTするデータに参照させる必要がないなら、これでよい。
参照させる必要があるなら、前もってSEQUENCEなどを使って発行する。 飛び番を作りたくないなら、仮IDとテンポラリテーブル、ストアドプロシージャを使って一括INSERT後に取得するという方法もあるけど、説明が面倒なのでやめ。 _________________ | ||||||||
|
投稿日時: 2005-01-22 06:48
SQL Server, Oracleなどはストアドプロシージャに出力パラメータを追加して 取得します。Access, MySQLの場合は、DataAdapterのRowUpdatedイベントで取得 します。 詳しくは、下記リンクをクリックしてください。 http://tinyurl.com/5qqlb _________________ ASP.NETサンプル集(Web Matrix版) [ メッセージ編集済み 編集者: Access 編集日時 2005-01-22 08:26 ] |
1