2

私が取り組んできたこのWebサイトアプリケーション、VB.NET .NET 3.5があり、すべてが正常に機能します。また、Webサイトのデータベースを更新するコンソールアプリケーションを開発する必要があります。Oracle10gデータベースを使用しています。

メインプロジェクトで使用しているのと同じ接続クラスをコピーしました。接続メソッドを呼び出そうとすると、次のエラーが発生します。

ConnectionStringプロパティが初期化されていません。

または、クラスを使用せずにコードを直接呼び出すと、このエラーが発生します。

'OraOLEDB.Oracle'プロバイダーがローカルマシンに登録されていません

理由はわかりません。現在、他のプロジェクトでも同じ接続が機能しています。

私の接続クラス:

Public Class connection
 Public con As New OleDbConnection
 Public Sub connect()
  con = New OleDbConnection
  con.ConnectionString = "Data Source=localhost;User Id=system;Password=root;Provider=OraOLEDB.Oracle"
 End Sub
End Class

そして私がそれを呼ぶとき:

connection.con.Open()
 sql.Connection = connection.con
 sql.CommandText = ...
 sql.CommandType = CommandType.Text
 reader = sql.ExecuteReader()
 While (reader.Read())
  ...
 End While
connection.con.Close()
4

2 に答える 2

2

この問題は、64ビットマシンで起動されたときにAnyCPU用にコンパイルされたコードがJITによって64ビットコードとして生成されるため、32ビットドライバーを使用できないという事実に起因します。x86プラットフォームのコードを再コンパイルするだけで、32ビットおよび64ビットシステムでも実行でき、32ビットドライバーを使用できます。

代わりに、2番目の問題は、connect()を呼び出さないため、そのconnection.conオブジェクトを使用できないようにする必要があるという事実によって引き起こされます。

上記のコードの一部を書き直してみましょう

まず、クラスをに変更する必要があります

Public Class Connection
    Private con As OleDbConnection
    Public OleDbConnection GetConnection()
        con = New OleDbConnection
        con.ConnectionString = "Data Source=localhost;" + 
                                "User Id=system;Password=root;Provider=OraOLEDB.Oracle"
        return con
    End Function
End Class

これで、コードは上記のクラスをこのように呼び出すことができます

Connection cc = new Connection()
Using con = cc.GetConnection()
    con.Open()
    sql.Connection = con
    sql.CommandText = ...
    sql.CommandType = CommandType.Text
    reader = sql.ExecuteReader()
    While (reader.Read())
        ...
    End While
End Using

ご覧のとおり、GetConnection()を呼び出すと、クラスは正しく初期化された接続を返します。このオブジェクトは、接続が不要になったときに接続で使用されるリソースを解放する目的で使用されるUsingステートメントで使用できます。

もちろん、クラス接続自体は、接続の作成を隠すことなく、接続を必要とするコードに直接、より単純なコードを記述できるため、そのままではかなり役に立ちません。
しかし、さらに機能を追加する予定がある場合は...

于 2013-01-28T20:16:49.837 に答える
0

x86 OS(32ビット)用にアプリケーションのデバッグを設定してみてください

ビルド->構成マネージャー->デバッグ->構成:デバッグ->プラットフォームx86

于 2013-01-28T19:06:09.473 に答える