【问题标题】:.NET and Oracle data access.NET 和 Oracle 数据访问
【发布时间】:2012-05-24 08:38:35
【问题描述】:

我正在尝试做这样的事情:

Public Sub (ByVal boolTest As Boolean)
Dim objConnecton As System.Data.Common.DbConnection
Try

  If boolTest Then
         objConnecton = New SqlConnection
  Else
          objConnecton = New OracleConnection 
  End If
  Catch ex As Exception

Finally
  'Cleanup here
End Try

这适用于版本 2.112.1.0 的 Oracle.DataAccess,但不适用于版本 10.2.0.100。使用版本 10.2.0.100,我收到以下编译错误:

“'Oracle.DataAccess.Client.OracleConnection' 类型的值无法转换为 'System.Data.Common.DbConnection'”

我正在尝试使用 SQLConnection 或 OracleConnection 的实例来初始化连接对象,具体取决于布尔值。

为什么会出现这个错误?

【问题讨论】:

    标签: .net oracle10g


    【解决方案1】:

    改用 System.Data.IDbConnection 怎么样?

    【讨论】:

    • 是的,您可以将连接实例声明为 IDBConnection 类型,因为 Oracle.DataAccess.Client.OracleConnection 派生自实现该接口的 System.Data.Common.DBConnection。编辑:对不起,这适用于我的 2.112.1.0 版本或 OracleDataAccess,所以看起来我的评论不适用于原始发帖人的问题。
    【解决方案2】:

    您可以使用 Microsoft 的 OracleConnection 实现而不是 Oracle one..

    http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracleconnection(v=vs.90).aspx

    最好的问候。

    【讨论】:

    • 谢谢。我现在正在测试这个。使用这种方法有任何风险吗? +1
    • 我不知道。可能有一些高级特性是由 Oracle 提供的,而 Microsoft 没有实现,但在基础上它们是相同的。
    【解决方案3】:

    为什么会出现这个错误?

    用于 .NET 的 Oracle 客户端的更高版本(10.2+)不派生自标准 .NET 框架类,例如 DbConnection。如果您想无缝支持多个数据库,这会带来不幸的副作用,因为您不能再仅使用 System.Data.Common 中的基类。

    【讨论】:

    • 感谢您说明错误原因。您会改用 System.Data.OracleClient.OracleConnection 吗? +1。
    • @w0051977 如果它对您有用,是的,它会简单得多。
    • 你所说的“功能性”用途是什么意思?
    • @w0051977 对于大多数用途,Microsoft 实现工作正常。我相信在 Oracle 提供的类中公开了一些特定于 Oracle 的功能。如果您尝试以这种方式使用它(您可以在运行时交换 DB),则 System.Data 版本应该没问题。
    • 谢谢。你能看看我的另一个问题吗? stackoverflow.com/questions/10627415/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多