2

我有这个我一直在研究的网站应用程序,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()
4

2 回答 2

2

问题源于这样一个事实,即在 64 位机器上启动时为 AnyCPU 编译的代码将由 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 语句中使用此对象,该语句用于在不再需要连接时释放连接使用的资源。

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

于 2013-01-28T20:16:49.837 回答
0

尝试为 x86 操作系统(32 位)设置应用程序调试

构建 -> 配置管理器 -> 调试 -> 配置:调试 -> 平台 x86

于 2013-01-28T19:06:09.473 回答