SQL Server Native Client と Microsoft Data Access Components (MDAC) には多くの違いがあります。Windows Vista 以降では、データ アクセス コンポーネントは Windows データ アクセス コンポーネント (Windows DAC) と呼ばれるようになりました。 どちらも SQL Server データベースへのネイティブ データ アクセスを提供しますが、SQL Server Native Client は、SQL Server 2005 の新機能を公開すると同時に、以前のバージョンとの下位互換性を維持するように特別に設計されています。
このトピックの情報は、SQL Server 2005 に含まれていた SQL Server Native Client のバージョンで MDAC (または Windows DAC) アプリケーションを最新の状態に更新するのに役立ちます。 SQL Server 2014 に付属している SQL Server Native Client のバージョンでこのアプリケーションを最新の状態にするには、「 SQL Server 2005 Native Client からのアプリケーションの更新」を参照してください。
さらに、MDAC には OLE DB、ODBC、および ActiveX データ オブジェクト (ADO) を使用するためのコンポーネントが含まれていますが、SQL Server Native Client は OLE DB と ODBC のみを実装します (ただし、ADO は SQL Server Native Client の機能にアクセスできます)。
SQL Server Native Client と MDAC は、他の領域で異なります。
ADO を使用して SQL Server Native Client プロバイダーにアクセスするユーザーは、SQL OLE DB プロバイダーにアクセスしたときよりもフィルター処理機能が少なくなる場合があります。
ADO アプリケーションで SQL Server Native Client を使用し、計算列を更新しようとすると、エラーが報告されます。 MDAC では、更新は受け入れられましたが、無視されました。
SQL Server Native Client は、単一の自己完結型ダイナミック リンク ライブラリ (DLL) ファイルです。 パブリックに公開されたインターフェイスは、配布を容易にするためだけでなく、セキュリティの公開を制限するためにも最小限に抑えられています。
OLE DB および ODBC インターフェイスのみがサポートされています。
SQL Server Native Client OLE DB プロバイダーと ODBC ドライバー名は、MDAC で使用される名前とは異なります。
MDAC コンポーネントによって提供されるユーザーアクセス機能は、SQL Server Native Client を使用する場合に使用できます。 これには、接続プール、ADO のサポート、クライアント カーソルのサポートが含まれますが、これらに限定されません。 これらの機能のいずれかを使用すると、SQL Server Native Client はデータベース接続のみを提供します。 MDAC には、トレース、管理コントロール、パフォーマンス カウンターなどの機能が用意されています。
アプリケーションでは、SQL Server Native Client で OLE DB コア サービスを使用できますが、OLE DB カーソル エンジンを使用する場合は、カーソル エンジンが新しい SQL Server 2005 データ型を認識していないために発生する可能性のある問題を回避するために、データ型互換性オプションを使用する必要があります。
SQL Server Native Client では、以前の SQL Server データベースへのアクセスがサポートされています。
SQL Server Native Client には XML 統合が含まれていません。 SQL Server Native Client では SELECT ... がサポートされています。FOR XML クエリですが、他の XML 機能はサポートされていません。 ただし、SQL Server Native Client では、SQL Server 2005 で導入された
xmlデータ型がサポートされています。SQL Server Native Client では、接続文字列属性のみを使用したクライアント側ネットワーク ライブラリの構成がサポートされています。 より完全なネットワーク ライブラリ構成が必要な場合は、SQL Server 構成マネージャーを使用する必要があります。
SQL Server Native Client は、odbcbcp.dllと互換性がありません。 SQL Server Native Client を使用するには、ODBC API と bcp API の両方を使用するアプリケーションを、sqlncli11.lib とリンクするように再構築する必要があります。
SQL Server Native Client は、Microsoft OLE DB provider for ODBC (MSDASQL) からはサポートされていません。 MDAC SQLODBC ドライバーと MSDASQL または MDAC SQLODBC ドライバーと ADO を使用している場合は、SQL Server Native Client で OLE DB を使用します。
MDAC 接続文字列では、Trusted_Connection キーワードのブール値 (
true) を使用できます。 SQL Server Native Client 接続文字列では、yesを使用する必要があります。 または使用しない必要があります。警告とエラーに軽微な変更が発生しました。 サーバーから返された警告とエラーは、SQL Server Native Client に渡されたときに同じ重大度を保持するようになりました。 特定の警告やエラーのトラップに依存している場合は、アプリケーションを十分にテストする必要があります。
SQL Server Native Client のエラー チェックは MDAC よりも厳密です。つまり、ODBC 仕様と OLE DB 仕様に厳密に準拠していないアプリケーションの動作が異なる場合があります。 たとえば、SQLOLEDB プロバイダーでは、結果パラメーターのパラメーター名が '@' で始まる必要がある規則は適用されませんでしたが、SQL Server Native Client OLE DB プロバイダーでは実行されます。
SQL Server Native Client の動作は、失敗した接続に関して MDAC とは異なります。 たとえば、MDAC は失敗した接続のキャッシュされたプロパティ値を返しますが、SQL Server Native Client は呼び出し元のアプリケーションにエラーを報告します。
SQL Server Native Client では Visual Studio Analyzer イベントは生成されず、代わりに Windows トレース イベントが生成されます。
SQL Server Native Client を perfmon と共に使用することはできません。 Perfmon は、Windows に含まれる MDAC SQLODBC ドライバーを使用する DSN でのみ使用できる Windows ツールです。
SQL Server Native Client が SQL Server 2005 以降のバージョンに接続されている場合、サーバー エラー 16947 はSQL_ERRORとして返されます。 このエラーは、配置された更新または削除が行の更新または削除に失敗した場合に発生します。 MDAC を使用して SQL Server の任意のバージョンに接続すると、サーバー エラー 16947 が警告 (SQL_SUCCESS_WITH_INFO) として返されます。
SQL Server Native Client は 、IDBDataSourceAdmin インターフェイスを実装します。これは、以前は実装されていない省略可能な OLE DB インターフェイスですが、この省略可能なインターフェイスの CreateDataSource メソッドのみが実装されます。 この機能は、今後のバージョンの Microsoft SQL Server で削除される予定です。 新しい開発作業ではこの機能を使用しないでください。現在この機能を使用しているアプリケーションを変更することを計画してください。
SQL Server Native Client OLE DB プロバイダーは、TABLES および TABLE_INFO スキーマ行セットのシノニムを返し、TABLE_TYPE SYNONYM に設定します。
データ型
varchar(max)、nvarchar(max)、varbinary(max)、xml、udt、またはその他のラージ オブジェクト型の戻り値は、SQL Server 2005 より前のクライアント バージョンには返されません。 これらの型を戻り値として使用する場合は、SQL Server Native Client を使用する必要があります。MDAC では、手動トランザクションと暗黙的トランザクションの開始時に次のステートメントを実行できますが、SQL Server Native Client では実行されません。 これらは自動コミット モードで実行する必要があります。
すべてのフルテキスト操作 (インデックスとカタログ DDL)
すべてのデータベース操作 (データベースの作成、データベースの変更、データベースの削除)
再設定
シャットダウン (停止)
殺す
バックアップ
MDAC アプリケーションが SQL Server に接続すると、次の表に示すように、SQL Server 2005 で導入されたデータ型は SQL Server 2000 と互換性のあるデータ型として表示されます。
SQL Server 2005 の型 SQL Server 2000 の種類 varchar(max)textnvarchar(max)ntextvarbinary(max)imageudtvarbinaryxmlntextこの型マッピングは、列メタデータに対して返される値に影響します。 たとえば、
text列の最大サイズは 2,147,483,647 ですが、SQL Server Native Client ODBC ではvarchar(max)列の最大サイズがSQL_SS_LENGTH_UNLIMITEDとして報告され、SQL Server Native Client OLE DB では、varchar(max)列の最大サイズはプラットフォームに応じて 2,147,483,647 または -1 と報告されます。SQL Server Native Client では、下位互換性の理由から、接続文字列のあいまいさが許容されます (たとえば、一部のキーワードは複数回指定でき、競合するキーワードは位置または優先順位に基づく解決で許可される場合があります)。 SQL Server Native Client の今後のリリースでは、接続文字列のあいまいさが許容されない場合があります。 SQL Server Native Client を使用するようにアプリケーションを変更し、接続文字列のあいまいさに対する依存関係を排除することをお勧めします。
ODBC または OLE DB 呼び出しを使用してトランザクションを開始する場合、SQL Server Native Client と MDAC の動作に違いがあります。トランザクションは SQL Server Native Client ですぐに開始されますが、トランザクションは MDAC を使用した最初のデータベース アクセスの後に開始されます。 SQL Server では、バッチまたはストアド プロシージャの実行が完了した後、バッチまたはストアド プロシージャが開始されたときと同じ@@TRANCOUNTである必要があるため、ストアド プロシージャとバッチの動作に影響する可能性があります。
SQL Server Native Client では、ITransactionLocal::BeginTransaction によってトランザクションがすぐに開始されます。 MDAC では、アプリケーションが暗黙のトランザクション モードでトランザクションを必要とするステートメントを実行するまで、トランザクションの開始が遅れていました。 詳細については、「SET IMPLICIT_TRANSACTIONS (Transact-SQL)」を参照してください。
System.Data.Odbc で SQL Server Native Client ドライバーを使用して、新しい SQL Server 固有のデータ型または機能を公開する SQL Server サーバー コンピューターにアクセスすると、エラーが発生することがあります。 System.Data.Odbc は、一般的な ODBC 実装を提供し、その後、ベンダー固有の機能や拡張機能を公開しません。 (SQL Server Native Client ドライバーは、最新の SQL Server 機能をネイティブにサポートするように更新されます)。この問題を回避するには、MDAC に戻すか、System.Data.SqlClient に移行します。
SQL Server Native Client と MDAC はどちらも、行のバージョン管理を使用した読み取りコミット済みトランザクション分離をサポートしますが、スナップショット トランザクション分離をサポートするのは SQL Server Native Client のみです。 (プログラミング用語では、行のバージョン管理を使用した読み取りコミット済みトランザクションの分離は、読み取りコミット済みトランザクションと同じです)。