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

问题描述:

我很困惑如何通过ODBC连接到Oracle。Windows ODBC数据源和.Net System.Data.Odbc:使用哪个驱动程序?

我在我的控制面板>管理工具中创建了一个名为“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. 微软ODBC的Oracle
  2. System.Data.Odbc
  3. 是这两个一样的吗?
  4. 或者是我通过其访问驱动程序的System.Data.Odbc类?我的意思是,“Oracle的Microsoft ODBC”是由Microsoft创建的Oracle的ODBC访问实现?
  5. 还有别的吗?

难道我需要来定义一个ODBC数据源与System.Data.Odbc命名空间连接到数据库(两者的Oracle,SQL Server,MySQL发的)?

谢谢!

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

为了理解您需要将托管端(.Net)从本机端(ODBC)分离出来。用于Oracle的Microsoft ODBC驱动程序是用于ODBC的驱动程序。它允许任何具有ODBC能力的应用程序连接到Oracle。 ODBC是本地技术。在otehr的手上.Net Framwork使用管理的数据提供者进行数据访问。一个这样的提供者是允许.Net应用程序连接到任何ODBC数据源的System.Data.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数据源。