Oracle DB に接続して簡単なクエリを実行する Windows アプリケーションを作成しました。クエリは開発用 PC で動作します。アプリケーションを公開してドメイン内の他のコンピューターから実行すると、DB に正常に接続されますが、リーダーは行を返しません。「閉じたオブジェクトに対する無効な操作」というエラーが表示されますが、私の開発用 PC では、正しい SELECT ステートメントから多くの行が返されます。
ldap_admin と tns_admin を適切に設定しており、すべてのコンピューターで接続が機能しています。
Dim constr As String = "Data Source=ABC;User Id=XX;Password=XX;"
Dim conn As OracleConnection = New OracleConnection(constr)
Dim cmd As New OracleCommand
Dim dr As OracleDataReader
Try
conn.Open()
cmd.Connection = conn
cmd.CommandText = "SELECT TableA.name FROM TableA "
cmd.CommandType = CommandType.Text
dr = cmd.ExecuteReader()
MsgBox(conn.DatabaseName)
MsgBox(conn.HostName)
MsgBox(conn.GetSessionInfo.TimeZone)
MsgBox(conn.InstanceName)
MsgBox(conn.ServiceName)
MsgBox(conn.ConnectionTimeout)
MsgBox(dr.HasRows() & ":" & dr.FieldCount & ":" & dr.GetName(0) & ":" & dr.IsClosed())
dr.Read()
MsgBox(dr.Item(0))
If dr.Read() Then
MsgBox("Read complete!!!")
TextBox1.Text = dr.Item(0) ' or use dr.Item(0)
Else
End If
Catch ex As Exception ' catches any error
MessageBox.Show(ex.Message.ToString())
Finally
' In a real application, put cleanup code here.
MsgBox("Connected Successfully")
dr.Close()
conn.Close()
End Try
他のコンピューターの接続を確認するために msgbox を配置しました。メッセージ ボックスには、すべてのコンピューターの正しい情報が表示されます。dr.Hasrows() は、開発用コンピューターで True のみを返します。ドメイン上の他のすべてのコンピューターは、それに対して false を返します。
誰か私がこれを理解するのを手伝ってくれませんか、それは私を夢中にさせています!
ありがとう - ハミド