使用控制台应用程序时,“OraOLEDB.Oracle”提供程序未在本地计算机上注册?

2024-01-09

我有一个我一直在开发的网站应用程序,VB.NET .NET 3.5,一切正常。我还需要开发一个更新网站数据库的控制台应用程序。我使用 Oracle 10g 数据库。

我复制了在主项目中使用的相同连接类,当我尝试调用连接方法时,出现此错误:

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()

该问题源于以下事实:为 AnyCPU 编译的代码在 64 位计算机上启动时将由 JIT 生成为 64 位代码,因此无法使用 32 位驱动程序。只需重新编译 x86 平台的代码即可使其在 32 位和 64 位系统上运行并使用 32 位驱动程序。

第二个问题是由于您没有调用 connect() 造成的,因此您不应该能够使用该 connection.con 对象,更不用说对其调用 open 了

让我重写上面的一些代码

首先,类应更改为

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 语句中使用该对象,该语句的目的是在不再需要连接时释放连接所使用的资源。

当然,类连接本身毫无用处,因为您可以直接在需要连接的代码上编写更简单的代码,而无需隐藏连接的创建。
但如果您打算添加更多功能......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用控制台应用程序时,“OraOLEDB.Oracle”提供程序未在本地计算机上注册? 的相关文章

随机推荐