- PR -

VB.NETからoracle 接続

投稿者投稿内容
なおこ(・∀・)
大ベテラン
会議室デビュー日: 2004/04/08
投稿数: 174
お住まい・勤務地: 東京都
投稿日時: 2005-09-07 15:07
また,念の為なんですが…,

引用:

みつばちまあやさんの書き込み (2005-09-07 08:30) より:
oracon.ConnectionString = "user id=scott;password=tiger;data
source=orcl;"



引用:

みつばちまあやさんの書き込み (2005-09-07 13:17) より:
oracon.ConnectionString = "user id=scott;password=tiger;"



が微妙に違っているような気がしますが,
ここへ張り忘れですよね?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-07 15:12
引用:

なおこ(・∀・)さんの書き込み (2005-09-07 15:07) より:
また,念の為なんですが…,

引用:

みつばちまあやさんの書き込み (2005-09-07 08:30) より:
oracon.ConnectionString = "user id=scott;password=tiger;data
source=orcl;"



引用:

みつばちまあやさんの書き込み (2005-09-07 13:17) より:
oracon.ConnectionString = "user id=scott;password=tiger;"



が微妙に違っているような気がしますが,
ここへ張り忘れですよね?


それだと、Open で例外が発生すると思いますから、多分張り忘れでしょう。(代弁)
Integrated Security じゃないところを突っ込みたいところです。
OracleConnection.ConnectionString プロパティ


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
みつばちまあや
会議室デビュー日: 2005/09/07
投稿数: 8
投稿日時: 2005-09-07 15:48
SQL*Plusからはログインできますし、selectもできます。
一応oracle自体に不安があるので再インストールしてみます
NAO
ぬし
会議室デビュー日: 2001/10/24
投稿数: 1256
お住まい・勤務地: 神奈川のはずれから東京の下町
投稿日時: 2005-09-07 16:05
引用:

みつばちまあやさんの書き込み (2005-09-07 15:48) より:
SQL*Plusからはログインできますし、selectもできます。
一応oracle自体に不安があるので再インストールしてみます


SQL*Plusからログイン出来、かつSELECTも出来るのであれば
Oracleに問題は無いです。

作られているPGのどこかにコーディングミスがあると言う事です。

まずは簡単なOracleに接続してデータを取ってくるPGを作って
それで通るのか確かめて下さい。

それと今回問題になっているPGを比較していけば良いのでは無いでしょうか? 

逆に追っていけば

C:\Documents and Settings\Administrator\My Documents\VB\WindowsApplication\Form1.vbline 85
→Form1の85行目の

at WindowsApplication.Form1.Button1_click(Object sender, EventArgs e)
→ボタン1をクリックするメソッドで

Oracle.DataAccess.Client.OracleCommand.ExecuteReader()
→を呼びますよ。

Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery,Boolean fillRequest,
CommandBehavior behavior)
→これを呼びますよ。

System.InvalidOperationException:→不正な操作が実行されました
この操作に対して接続がオープンされている必要があります。

ですから要するに必要な引数が足りてないか間違っているんじゃ無いでしょうか?
_________________
Inspired Ambitious
ISMS Assistant Auditor

[ メッセージ編集済み 編集者: NAO 編集日時 2005-09-07 16:14 ]
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2005-09-07 19:23
引用:

じゃんぬねっとさんの書き込み (2005-09-07 14:55) より:
ローカル変数が優先されると思いますが...


そうか。確かにそうですね…。

しかし何とな〜く、投稿されたコードが全てではなくて、問題のメソッドの外とか別のところに原因がありそうな気がするんですよね。

引用:

混在しているのは、自動フォーマットを OFF にしているからですかね。


再度投稿された内容では統一されていたり、接続文字列が変わっていたり、うーん…。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-09-07 22:41
リファクタしていいですか?
コード:

Dim ConnStr As String = "user id=scott;password=tiger;data source=orcl;"
Dim OraCon As New OracleConnection(ConnStr)
Dim strSQL As String = "SELECT * FROM EMP"
Dim Cmd As New OracleCommand(strSQL, OraCon)
Dim Rdr As OracleDataReader = Nothing

Try ' Open the connection
Cmd.Connection.Open();

Console.WriteLine("Connection to Oracle database established successfully !")
Console.WriteLine(" ")
MessageBox.Show(OraCon.State.ToString() & "状態です", "結果通知")

Rdr = Cmd.ExecuteReader()
Dim res As New System.Text.StringBuilder
While Rdr.Read()
res.AppendFormat("{0:9999} {1}{2}" _
, Rdr.GetInt16(0) _
, Rdr.GetString(1) _
, VbCrLf)
End While
TextBox1.Text = res.ToString()

Catch ex As Exception
Console.WriteLine(ex.Message)

Finally
If Not Rdr Is Nothnig Then Rdr.Close()
OraCon.Close()
Cmd.Dispose()
End Try


 オープンに失敗した後に使おうとしてはいけません。そんなの、必ずエラーになります。なので、Try 〜 Catch は1つで十分です。

 例外が発生すると、Catch ブロックへ飛びます。Try 〜 Catch の中で Dispose や Close をしてはいけません。これらは Finally ブロックにまとめます。

 文字列の連結を、たくさんする場合は StringBuilder を使います。文字列A+文字列Bをすると、AとBの領域の他に、できあがった文字列Cの領域が確保されます。非常にメモり効率が悪いです。
 元のコードでは、
TextBox1.Text & Rdr.GetInt16(0) の結果…1
1 & " " の結果…2
2 & Rdr.GetString(1) の結果…3
3 & vbCrLf の結果
が確保され、TextBox1.Text に代入されます。


_________________
Rdr の Nothing チェック、忘れてた

[ メッセージ編集済み 編集者: Jitta 編集日時 2005-09-07 22:42 ]
長老
会議室デビュー日: 2005/12/10
投稿数: 3
投稿日時: 2005-12-10 06:21
古いスレッドですが情報提供のため返信します。
こちらでもまったく同じ現象が起きました。
現象を整理すると
・コネクションのオープンは正常終了する
・OracleDataReaderのReadメソッドで例外が起きる
・「追加情報 : この操作に対して接続がオープンされている必要があります。」が出力される

こちらで判明した原因はエラーを起こしているマシンに10gサーバー用/クライアント用2つのORACLEをインストールしていたためでした。
システム変数PATHをみると10gサーバー用のPATHが先に切ってあり次にクライアント用が続いていました。そこでこのPATHの順序を入れ替えたら上記エラーは起きなくなりました。
ちなみに当該マシンではORACLE自体は正常にインストールされているのでSQL*PLUSは正常に動きます。
みつばちまあやさんは再インストールされているみたいですので同じ状態だとしたらPATHの設定も変わり解消されているかもしれませんね。

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