ADO.NET での side-by-side 実行
更新 : November 2007
.NET Framework の side-by-side 実行は、.NET Framework の複数のバージョンがインストールされている 1 台のコンピュータ上で、アプリケーションのコンパイル時のバージョンのみを使用して、アプリケーションを実行する機能です。side-by-side 実行の設定の詳細については、「side-by-side 実行」を参照してください。
あるバージョンの .NET Framework を使用してコンパイルされたアプリケーションを、別のバージョンの .NET Framework で実行することもできます。ただし、インストールされている .NET Framework のバージョンごとにアプリケーションをコンパイルして、各バージョンを別々に実行することをお勧めします。いずれの場合でも、ADO.NET の各リリース間の変更によって生じるアプリケーションの上位互換性または下位互換性の問題に注意する必要があります。
上位互換性と下位互換性
上位互換性とは、アプリケーションを以前のバージョンの .NET Framework と共にコンパイルでき、しかも新しいバージョンの .NET Framework でも実行できることを意味します。.NET Framework 1.1 用に書かれた ADO.NET コードは、後のバージョンとの上位互換性があります。
下位互換性とは、アプリケーションが .NET Framework の新しいバージョン用にコンパイルされ、機能を低下させずに、.NET Framework の以前のバージョンで引き続き実行できることを意味します。当然のことながら、.NET Framework の新しいバージョンで導入された機能については、これは該当しません。
.NET Framework Data Provider for ODBC
Version 1.1 以降、.NET Framework Data Provider for ODBC (System.Data.Odbc) は、.NET Framework の一部として同梱されています。.NET Framework Version 1.0 の開発者は、データ アクセスおよびストレージ デベロッパー センターから ODBC データ プロバイダをダウンロードできます。ダウンロードされた .NET Framework Data Provider for ODBC の名前空間は Microsoft.Data.Odbc です。
ODBC データ プロバイダを使用してデータ ソースに接続する、.NET Framework Version 1.0 用に開発したアプリケーションがあり、そのアプリケーションを .NET Framework Version 1.1 以降で実行する場合は、ODBC データ プロバイダの名前空間を System.Data.Odbc に更新する必要があります。その後で、.NET Framework の新しいバージョン用に再コンパイルする必要があります。
ODBC データ プロバイダを使用してデータ ソースに接続する .NET Framework Version 2.0 以降用に開発したアプリケーションがあり、そのアプリケーションを .NET Framework Version 1.0 で実行する場合は、ODBC データ プロバイダをダウンロードし、.NET Framework Version 1.0 システムにインストールする必要があります。次に、ODBC データ プロバイダの名前空間を Microsoft.Data.Odbc に変更し、アプリケーションを .NET Framework Version 1.0 用に再コンパイルする必要があります。
.NET Framework Data Provider for Oracle
Version 1.1 以降、.NET Framework Data Provider for Oracle (System.Data.OracleClient) は、.NET Framework の一部として同梱されています。.NET Framework Version 1.0 の開発者は、データ アクセスおよびストレージ デベロッパー センターからデータ プロバイダをダウンロードできます。
このデータ プロバイダを使用してデータ ソースに接続する、.NET Framework Version 2.0 以降用に開発したアプリケーションがあり、そのアプリケーションを .NET Framework Version 1.0 で実行する場合は、該当するデータ プロバイダをダウンロードし、.NET Framework Version 1.0 システムにインストールする必要があります。
コード アクセス セキュリティ
.NET Framework Version 1.0 の .NET Framework データ プロバイダ (System.Data.SqlClient、System.Data.OleDb) を実行するには、FullTrust 権限が必要です。権限レベルが FullTrust より低いゾーンで .NET Framework Version 1.0 の .NET Framework データ プロバイダを使用しようとすると、SecurityException がスローされます。
ただし、.NET Framework Version 2.0 以降では、部分的に信頼されたゾーンで .NET Framework データ プロバイダのすべてを使用できるようになりました。さらに、.NET Framework Version 1.1 の .NET Framework データ プロバイダに新しいセキュリティ機能が追加されました。この機能により、特定のセキュリティ ゾーンで使用できる接続文字列を制限することができます。特定のセキュリティ ゾーンに対して空白のパスワードの使用を禁止することもできます。詳細については、「コード アクセス セキュリティと ADO.NET」を参照してください。
.NET Framework のインストールごとに個別の Security.config ファイルがあるため、セキュリティ設定については、互換性の問題はありません。ただし、アプリケーションが、.NET Framework Version 1.1 以降に同梱されている ADO.NET の追加のセキュリティ機能に依存している場合は、アプリケーションを Version 1.0 システムに配布することはできません。
SqlCommand の実行
.NET Framework Version 1.1 以降では、ExecuteReader がデータ ソースでコマンドを実行する方法が変更されました。
.NET Framework Version 1.0 では、ExecuteReader は、sp_executesql ストアド プロシージャのコンテキストですべてのコマンドを実行します。その結果、接続の状態に影響を与えるコマンド (たとえば、SET NOCOUNT ON) は、現在のコマンドの実行だけに適用されます。接続が開かれている間に実行される後続のコマンドについては、接続の状態は変更されません。
.NET Framework Version 1.1 以降では、ExecuteReader は、コマンドにパラメータが含まれている場合だけ、sp_executesql ストアド プロシージャのコンテキストでコマンドを実行します。これにより、パフォーマンスが向上します。その結果、接続の状態に影響を与えるコマンドが、非パラメータ化コマンドに含まれている場合、接続が開いている間に実行される後続のすべてのコマンドに対して、接続の状態を変更します。
たとえば、ExecuteReader への呼び出しで次のバッチ コマンドが実行されるとします。
SET NOCOUNT ON;
SELECT * FROM dbo.Customers;
.NET Framework Version 1.1 以降では、NOCOUNT は、接続が開いている間に実行される後続のコマンドに対して ON のままです。.NET Framework Version 1.0 では、NOCOUNT は、現在のコマンドの実行に対してだけ ON です。
アプリケーションが、どちらかのバージョンの .NET Framework の ExecuteReader の動作に依存している場合は、この変更が上位互換性と下位互換性の両方に影響することがあります。
アプリケーションを .NET Framework の以前のバージョンと新しいバージョンの両方で動作させる場合は、どのバージョンで実行された場合にも動作が同じになるように、コードを記述できます。変更された接続状態が後続のすべてのコマンドでも有効になるようにする場合は、ExecuteNonQuery を使用してコマンドを実行することをお勧めします。変更された接続状態が後続のコマンドでは無効になるようにする場合は、接続状態をリセットするコマンドを含めるようにしてください。次に例を示します。
SET NOCOUNT ON;
SELECT * FROM dbo.Customers;
SET NOCOUNT OFF;
Microsoft SQL Server Native Client
Microsoft SQL Server Native Client では、SQL OLE DB プロバイダおよび SQL ODBC ドライバが 1 つのネイティブ ダイナミック リンク ライブラリ (DLL) に含まれており、ネイティブ コード API (ODBC、OLE DB、ADO) を使用して Microsoft SQL Server に接続するアプリケーションをサポートします。MARS (複数のアクティブな結果セット)、クエリ通知、UDT (ユーザー定義データ型)、XML データ型のサポートなど、SQL Server 2005 で導入された新機能を必要とする新しいアプリケーションを作成したり、これらの機能で既存のアプリケーションを強化する場合は、Microsoft Data Access Components (MDAC) ではなく、SQL Server Native Client を使用する必要があります。
Microsoft Data Access Components (MDAC)
OLE DB 用および ODBC 用の .NET Framework データ プロバイダには、.NET Framework のバージョンにかかわらず、MDAC 2.6 以降のインストールが必要です。また、MDAC 2.8 SP1 をインストールすることをお勧めします。この要件により、side-by-side 実行に関する問題が発生することはありませんが、MDAC は現在 side-by-side 実行をサポートしていないことに注意してください。このため、インストールされている MDAC コンポーネントをアップグレードする場合は、アプリケーションが新しいバージョンでも正常に機能することを事前に確認する必要があります。
MDAC の詳細については、「データ アクセスおよびストレージ デベロッパー センター」を参照してください。
Windows Data Access Components (Windows DAC)
Windows Data Access Components (Windows DAC) 6.0 は、企業規模での情報アクセスを提供するために Windows Vista で使用されているテクノロジの集合です。これらのテクノロジには、Microsoft ActiveX Data Objects (ADO)、OLE DB、Microsoft Open Database Connectivity (ODBC) など、MDAC で使用されているデータ アクセス テクノロジの最新版が含まれています。
Windows DAC の詳細については、「Windows Data Access Components SDK の概要」を参照してください。