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

新しく挿入したRowのオートナンバー値

1
投稿者投稿内容
こだ
会議室デビュー日: 2003/07/15
投稿数: 6
投稿日時: 2003-07-15 21:47
Webアプリケーション(C#)でオートナンバー型のフィールドを持つテーブルに、
NewRow()で新しいRowを追加し、その後、
新しく生成されたオートナンバー型のフィールドの値を取得しようと思い、
Rowを追加後、

int tID;
OleDbCommand idCMD = new OleDbCommand("SELECT @@IDENTITY", oUCn);
oUCn.Open();
tID = ((int)idCMD.ExecuteScalar());
oUCn.Close();

としたのですが、毎回、tIDの値が0になってしまいます。
根本的に何か間違っているのでしょうか?
いし
常連さん
会議室デビュー日: 2003/04/15
投稿数: 27
投稿日時: 2003-07-16 00:18
はっきりとは分からないのですが、同じコネクション内で行なう必要がある
んじゃないでしょうか?
モデラート
会議室デビュー日: 2003/06/29
投稿数: 9
お住まい・勤務地: 東京都
投稿日時: 2003-07-16 01:00
こんにちは。

@@IDENTITY関数ではなかなか正確にIDを取れないことが多いので、私の場合はIDENT_CURRENT('table_name')という関数を使用しています。(SQL serverの場合)これで、'table_name'の部分に最後にレコードを追加したテーブル名を入れ込み、取れないでしょうか?

しかし、「いし」さんの仰っているように異なったコネクションでもIDを取得できるかどうかはテストしていませんので、分かりません。
正確ではなくて、申し訳ありませんが、上手く行けば幸いです。
こだ
会議室デビュー日: 2003/07/15
投稿数: 6
投稿日時: 2003-07-16 12:12
いしさん、モデラートさんありがとうございます。

ここへの書きこみ後、一度ソースを書き直してみたところ、
tIDの値を正しく得ることが出来ました。
他にも何箇所かハマっていたところがあるため、ソースを書きちらかしており、
このため、いしさんの書きこみにあるように違うコネクションでIDを取得しようとしていたのだと思います。
解決後、意図的に違うコネクションで試してみたところ、0になっておりました。

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

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