0

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 を返します。

誰か私がこれを理解するのを手伝ってくれませんか、それは私を夢中にさせています!

ありがとう - ハミド

4

0 に答える 0