- PR -

Oracle で Connection is already open

1
投稿者投稿内容
どんぐり
会議室デビュー日: 2004/04/16
投稿数: 6
投稿日時: 2004-04-16 23:08
現在Oracleでデータベースについてやっています。

Dim conn As OracleConnection = Nothing
conn = New OracleConnection
conn.ConnectionString = "User Id=1234;Password=1234;Data Source=1234;"

conn.Open()
(略)
Dim cmd As OracleCommand = New OracleCommand(msqlstmt,conn)
Dim myReader As OracleDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
(略)
myReader.close()
conn.close()

という風に接続させているのですが、
conn.open()のところで
-----------------------------------------
conn.Open() 実行時例外がスローされました :
System.InvalidOperationException - Connection is already open
-----------------------------------------
というエラーが出てしまっています。
昼過ぎまでは普通に接続し、SQL文によってデータの取得はできていたのですが、
突然このようなエラーとなり、現在も使用できません。

何か思う原因がおわかりの方、その原因を教えていただけないでしょうか。
どうかよろしくお願いします。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-04-17 10:33
>already open
と言われるのなら、
conn.Open()
の部分を抜いて実行してみたらどうなります。
どんぐり
会議室デビュー日: 2004/04/16
投稿数: 6
投稿日時: 2004-04-17 12:08
レスありがとうございます。
申し訳ありません。言い忘れましたが、このコードはActiveReport上で記述しています。

conn.Open()
の部分を抜いて実行すると、一度目はConnectionを開けとエラーが出てきました。
そのとき conn.state は Close でした。
そしてもう一度すぐに実行すると、
conn.ConnectionString
に接続文字列を代入したところで conn.state が Open になりました。
conn.Open() はコメントアウトしています。

そして DataReader のところでは、
"オブジェクトの現在の状態に問題があるため,操作は有効ではありません"
というエラーがでました。これは正常に開いてないから出るものと思っていますけど。

最後に conn.Close() を置いているのですが、
conn.state が Close になりませんでした。
なので conn.Dispose すると Close にはなったのですが、
変わらず同じようなエラーと動作がになります。


あと、conn.open()を除かずに再びやってみたのですが、
一度目はエラーで正常に動かないんですが、
その状態でブラウザの更新ボタンを押すと正常に動作しているみたいです。
ブレイクポイントつかうと必ず表示されません。

もうどうなっているのかさっぱりです、、、
どんぐり
会議室デビュー日: 2004/04/16
投稿数: 6
投稿日時: 2004-04-18 20:48
解決しました。

DBの方に問題はなく、アクティブレポートを呼び出すフォームで
二重にロードしていたようです。
急にではなく、はじめから起こってて、
それまでは運良く一回で表示できていたと思います。

コード書いてる場所とは別のところにも
問題があってバグや変な動作をするということがよくわかった気がします^^;
1

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