1

我对如何通过 ODBC 连接到 Oracle 感到困惑。

我在“控制面板”>“管理工具”中创建了一个名为“ oracle ”的 ODBC 数据源,并使用了驱动程序“Microsoft ODBC for Oracle”。

在我的 app.config 中,我有以下连接字符串

<?xml version="1.0"?>
<configuration>
  <configSections>
  </configSections>
  <connectionStrings>
    <add name="MappingAssistantGui2.Properties.Settings.maConnectionString"
      connectionString="Dsn=oracle;uid=ma;pwd=ma" providerName="System.Data.Odbc" />
    <add name="MappingAssistantGui2.Properties.Settings.maConnectionStringSqlServer"
      connectionString="Dsn=sqlserver;uid=sli;pwd=slislisli" providerName="System.Data.Odbc" />
    <add name="MappingAssistantGui2.Properties.Settings.maConnectionStringOracle"
      connectionString="Dsn=oracle;uid=ma;pwd=ma" providerName="System.Data.Odbc" />
  </connectionStrings>
  <startup>
    <supportedRuntime version="v2.0.50727" />
  </startup>
</configuration>

在我的代码中,我使用连接字符串 maConnectionString(第一个)。我对下面使用的驱动程序感到困惑:

  1. 适用于 Oracle 的 Microsoft ODBC
  2. 系统.数据.Odbc
  3. 这两个是一样的吗?
  4. 还是我通过它访问驱动程序的 System.Data.Odbc 类?我的意思是,“Microsoft ODBC for Oracle”是 Microsoft 创建的 Oracle ODBC 访问实现吗?
  5. 还有什么?

我是否需要定义一个 ODBC 数据源才能将 System.Data.Odbc 命名空间连接到数据库(Oracle、SQL Server、MySQL 中的哪一个)?

谢谢!

4

1 回答 1

2

在您描述的配置中,您将使用两个“驱动程序”。从技术上讲, System.Data.Odbc 不是驱动程序,而是提供程序

要了解发生了什么,您需要将托管端 (.Net) 与本机端 (ODBC) 分开。Microsoft ODBC Driver for Oracle 是 ODBC 的驱动程序。它允许任何支持 ODBC 的应用程序连接到 Oracle。ODBC 是一种本机技术。另一方面,.Net Framwork 使用托管数据提供程序进行数据访问。一个这样的提供者是 System.Data.Odbc 提供者,它允许 .Net 应用程序连接到任何 ODBC 数据源。因此,当您的托管应用程序连接到 maConenctionString 时,它使用 System.Data.Odbc 提供程序连接到名为“oracle”的 ODBC 源,并且 ODBC 管理器将加载 Microsoft ODBC Driver for Oracle 以连接到实际后端。

Now that being said it is recommended you use native providers whenever possible. So instead of connecting via the ODBC provider to an ODBC data source, is much better if you use directly the respective native provider like the .Net Managed Provider for Oracle (for older frameworks) or the newer System.Data.OracleClient.

于 2009-07-02T17:57:50.227 回答