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. System.Data.Odbc
  3. この二つは同じですか?
  4. または、ドライバーにアクセスしている System.Data.Odbc クラスですか? つまり、「Microsoft ODBC for Oracle」は Microsoft によって作成された Oracle 用の ODBC アクセスの実装ですか?
  5. 他の何か?

System.Data.Odbc 名前空間を使用してデータベース (Oracle、SQL Server、MySQL のいずれか) に接続するには、ODBC データソースを定義する必要がありますか?

ありがとう!

4

1 に答える 1

2

説明した構成では、両方の「ドライバー」を使用します。技術的には、System.Data.Odbc はドライバーではなく、プロバイダーです

何が起こっているのかを理解するには、マネージ側 (.Net) をネイティブ側 (ODBC) から分離する必要があります。Microsoft ODBC Driver for Oracle は、ODBC 用のドライバーです。これにより、ODBC が可能なすべてのアプリケーションが Oracle に接続できるようになります。ODBC はネイティブテクノロジです。一方、.Net Framwork は、データ アクセスにマネージドデータ プロバイダーを使用します。そのようなプロバイダーの 1 つは System.Data.Odbc プロバイダーで、.Net アプリケーションが任意の ODBC データ ソースに接続できるようにします。そのため、マネージド アプリケーションが maConenctionString に接続するとき、System.Data.Odbc プロバイダーを使用して「oracle」という名前の ODBC ソースに接続し、ODBC マネージャーは Microsoft ODBC Driver for Oracle をロードして実際のバックエンドに接続します。

そうは言っても、可能な限りネイティブ プロバイダーを使用することをお勧めします。したがって、ODBC プロバイダー経由で ODBC データ ソースに接続する代わりに、.Net Managed Provider for Oracle (古いフレームワーク用) や新しいSystem.Data.OracleClientなどのそれぞれのネイティブ プロバイダーを直接使用する方がはるかに優れています。

于 2009-07-02T17:57:50.227 に答える