Windows ODBC数据源和.Net System.Data.Odbc:使用了哪个驱动程序?

时间:2009-07-02 13:19:00

标签: .net oracle odbc datasource driver

我对如何通过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. Microsoft ODBC for Oracle
  2. System.Data.Odbc
  3. 这两个是一样的吗?
  4. 或者是我通过其访问驱动程序的System.Data.Odbc类?我的意思是,“Microsoft ODBC for Oracle”是由Microsoft创建的Oracle ODBC访问实现吗?
  5. 别的什么?
  6. 需要是否已将ODBC数据源定义为与System.Data.Odbc命名空间连接到数据库(无论是Oracle,SQL Server,MySQL)?

    谢谢!

1 个答案:

答案 0 :(得分:1)

在您描述的配置中,您将使用两个'drivers'。从技术上讲,System.Data.Odbc不是驱动程序,是provider

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

现在说it is recommended you use native providers whenever possible。因此,如果您直接使用相应的本地提供程序(如.Net Managed Provider for Oracle(对于较旧的框架)或较新的System.Data.OracleClient),而不是通过ODBC提供程序连接到ODBC数据源,则会更好。