- PR -

セッションテーブル(一時表)

1
投稿者投稿内容
初心者さん
会議室デビュー日: 2005/08/25
投稿数: 16
投稿日時: 2005-10-28 11:57
開発環境
 VB.NET
Oracle10g
ODP.NET

いつもお世話になります。

VB.NETでセッションテーブルを使用しています。
下記の順番で実行しているのですがセッションテーブルに登録したデータを検索したときに登録したはずのデータがひっかからないのです。

@DB接続
 OracleConnection.Open

Aストアドプロシージャの中でセッションテーブルにデータを登録
 OracleCommand.ExecuteScalar()

B登録されたデータを.NET側で検索
 OracleDataAdapter.Fill(DataTable)

C画面に表示

DDB切断
 OracleConnection.Close

これをボタンクリック時に行っているのですが1回目にクリックするとなにも表示されないが、プログラムを終了せずもう一度クリックすると登録したデータが表示されます(正しく検索できる)。
※Open時、ストアド実行時、データを検索時にどんどんセッションが増えていってしまうのですがそれと関係はあるのでしょうか?
よろしくお願いいたします。

明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2005-10-28 12:49
単純に別セッションになってるだけと思いますが

一時テーブルを普通のテーブルに変更してから
セッションIDをテーブルに登録してみてはどうでしょう?


OracleSQLパズル
http://oraclesqlpuzzle.hp.infoseek.co.jp

[ メッセージ編集済み 編集者: 明智重蔵 編集日時 2005-10-28 12:50 ]
初心者さん
会議室デビュー日: 2005/08/25
投稿数: 16
投稿日時: 2005-10-28 15:05
明智重蔵さんありがとうございます。

やはりセッションをひとつにすることは出来ないんですかね?

ひとつ疑問なんですが、ボタンクリックをクリックする度にストアドで登録したデータが同じ件数分どんどん増えていきます(.NET側で検索すると10件、20件、30件・・・)。
これは2回目以降は同じセッションで登録、検索を行っているということになるのですか?
たびたびすみませんが、アドバイスよろしくお願いいたします。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-10-28 23:06
通常、ODP.NETではコネクションプールを用います。OracleConnection.Openしたときにコネクションプールから、開いているコネクションが取得され使われます。前回Openした時のコネクションと、今回Openしたときのコネクションが同じとは限りません。

Oracleの一時表は、コネクション毎にデータが保持されます。コネクションが閉じられた場合には、一時表に格納されているデータも失われます。本来ならOracleConnection.Closeした時に、一時表の内容も破棄されるべきだと思うのですが、質問の挙動から察するに破棄されずに残っているようですね。

コネクションプールを使いたくない(一時表を活用したい)のであれば、OracleConnection.Openを毎回行うのではなく、一度Openしたコネクションをずっと保持するようにすればよいでしょう。
初心者さん
会議室デビュー日: 2005/08/25
投稿数: 16
投稿日時: 2005-11-01 17:02
甕星さんありがとうございます。

教えていただいた通りOpenしたコネクションを保持するようにしたり、いろいろ試してみたのですがどうもうまくいきませんでした。。
どうしても一時表でというわけではないので、実テーブルにIDを持たせ対応することにしました。
どうもありがとうございました。
1

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