- - PR -
セッションテーブル(一時表)
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 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-10-28 12:49
単純に別セッションになってるだけと思いますが
一時テーブルを普通のテーブルに変更してから セッションIDをテーブルに登録してみてはどうでしょう? OracleSQLパズル http://oraclesqlpuzzle.hp.infoseek.co.jp [ メッセージ編集済み 編集者: 明智重蔵 編集日時 2005-10-28 12:50 ] |
|
投稿日時: 2005-10-28 15:05
明智重蔵さんありがとうございます。
やはりセッションをひとつにすることは出来ないんですかね? ひとつ疑問なんですが、ボタンクリックをクリックする度にストアドで登録したデータが同じ件数分どんどん増えていきます(.NET側で検索すると10件、20件、30件・・・)。 これは2回目以降は同じセッションで登録、検索を行っているということになるのですか? たびたびすみませんが、アドバイスよろしくお願いいたします。 |
|
投稿日時: 2005-10-28 23:06
通常、ODP.NETではコネクションプールを用います。OracleConnection.Openしたときにコネクションプールから、開いているコネクションが取得され使われます。前回Openした時のコネクションと、今回Openしたときのコネクションが同じとは限りません。
Oracleの一時表は、コネクション毎にデータが保持されます。コネクションが閉じられた場合には、一時表に格納されているデータも失われます。本来ならOracleConnection.Closeした時に、一時表の内容も破棄されるべきだと思うのですが、質問の挙動から察するに破棄されずに残っているようですね。 コネクションプールを使いたくない(一時表を活用したい)のであれば、OracleConnection.Openを毎回行うのではなく、一度Openしたコネクションをずっと保持するようにすればよいでしょう。 |
|
投稿日時: 2005-11-01 17:02
甕星さんありがとうございます。
教えていただいた通りOpenしたコネクションを保持するようにしたり、いろいろ試してみたのですがどうもうまくいきませんでした。。 どうしても一時表でというわけではないので、実テーブルにIDを持たせ対応することにしました。 どうもありがとうございました。 |
1
