0

私はこれが非常に基本的なことを知っており、これを何百回も行ってきました。しかし、何らかの奇妙な理由で、データベースでこのコマンドを実行していますが、結果から列を読み取ろうとすると失敗します。同じ資格情報としてログインした SQL Plus でこのステートメントを実行すると、行 (テーブルには 1 行あります) が正常に選択されます。私が間違っていることはありますか?名前、インデックス、実際には任意の列で列にアクセスしようとしましたが、すべてデータがありません。.NextResult() (念のため) なしで試しましたが、同じ例外です。

'...
' Determine if this database is Multisite enabled
Dim multisiteCmd As OleDbCommand = DbConnection.CreateCommand
multisiteCmd.CommandText = "SELECT * FROM TDM_DB_VERSION;"
Dim dbVersionReader As OleDbDataReader = multisiteCmd.ExecuteReader()
If dbVersionReader.HasRows Then
    dbVersionReader.NextResult()
    'If a ReplicaID was generated for the Database ID, then this is part of a
    'multisite implementation
    'Dim dbRepID As String = dbVersionReader("DB_REPLICID")
    Dim dbRepID As String = dbVersionReader(9)
    PluginSettings.UseMultisite = False
    If Not dbRepID Is Nothing Then
        If dbRepID.Length > 0 Then
            PluginSettings.UseMultisite = True
            PluginSettings.MultisiteReplicaId = dbRepID
        End If
    End If
End If
dbVersionReader.Close()

これらのイミディエイト コマンドからわかるように、接続は開いています。

? DbConnection.Provider "OraOLEDB.Oracle" ? DbConnection.State オープン {1}

4

1 に答える 1

1

NextResult()複数の結果セットを持つステートメント用です。たとえば、次のようなコマンドを送信したとします。

"SELECT * FROM TDM_DB_VERSION;SELECT * FROM dual;"

そこには 2 つのクエリがあることに注意してください。データベースへの 1 回の呼び出しと 1 回の OleDbDataReader で両方を処理できます。NextResult() はその方法の一部です。

代わりにこれが必要です:

Dim multisiteCmd As OleDbCommand = DbConnection.CreateCommand
multisiteCmd.CommandText = "SELECT * FROM TDM_DB_VERSION;"
Dim dbVersionReader As OleDbDataReader = multisiteCmd.ExecuteReader()
If dbVersionReader.Read() Then
    'If a ReplicaID was generated for the Database ID, then this is part of a
    'multisite implementation
    'Dim dbRepID As String = dbVersionReader("DB_REPLICID")
    Dim dbRepID As String = dbVersionReader(9)
    PluginSettings.UseMultisite = False
    If Not dbRepID Is Nothing Then ' Do you mean check for DbNull here? "Nothing" is not the same thing
        If dbRepID.Length > 0 Then
            PluginSettings.UseMultisite = True
            PluginSettings.MultisiteReplicaId = dbRepID
        End If
    End If
End If
dbVersionReader.Close()
于 2014-09-05T15:57:53.020 に答える