次の方法で共有


MDAC から SQL Server Native Client へのアプリケーションの更新

SQL Server Native Clientと Microsoft Data Access Components (MDAC) には多くの違いがあります。Windows Vista 以降では、データ アクセス コンポーネントは Windows Data Access コンポーネント (Windows DAC) と呼ばれるようになりました。 どちらもSQL Serverデータベースへのネイティブ データ アクセスを提供しますが、SQL Server Native Clientは、以前のバージョンとの下位互換性を維持しながら、SQL Server 2005 の新機能を公開するように特別に設計されています。

このトピックの情報は、SQL Server 2005 に含まれていたSQL Server Native Clientのバージョンで MDAC (または Windows DAC) アプリケーションを最新の状態に更新するのに役立ちます。 2014 年SQL Serverに出荷された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と互換性がありません。 odbc API と bcp API の両方を使用するアプリケーションは、SQL Server Native Clientを使用するために sqlncli11.lib とリンクするように再構築する必要があります。

  • SQL Server Native Clientは、Microsoft OLE DB provider for ODBC (MSDASQL) からはサポートされていません。 MSDASQL で MDAC SQLODBC ドライバーを使用している場合、または ADO で MDAC SQLODBC ドライバーを使用している場合は、SQL Server Native Clientで OLE DB を使用します。

  • MDAC 接続文字列では、Trusted_Connection キーワード (keyword)のブール値 (true) を使用できます。 SQL Server Native Client接続文字列では、 を使用するか、または使用yesしない必要があります。

  • 警告とエラーが一部変更されています。 サーバーから返された警告とエラーは、SQL Server Native Clientに渡されたときに同じ重大度を保持するようになりました。 特定の警告やエラーのトラッピングに依存しているアプリケーションは、十分にテストする必要があります。

  • SQL Server Native Clientは、MDAC よりも厳密なエラー チェックを行います。つまり、ODBC と OLE DB の仕様に厳密に準拠していないアプリケーションの動作が異なる場合があります。 たとえば、SQLOLEDB プロバイダーでは、結果パラメーターのパラメーター名は '@' で始まる必要がありますが、OLE DB プロバイダー SQL Server Native Clientで始まるという規則は適用されませんでした。

  • SQL Server Native Clientは、失敗した接続に関して MDAC とは異なる動作をします。 たとえば、MDAC は失敗した接続のキャッシュされたプロパティ値を返しますが、SQL Server Native Clientは呼び出し元のアプリケーションにエラーを報告します。

  • SQL Server Native Clientでは Visual Studio Analyzer イベントは生成されず、代わりに Windows トレース イベントが生成されます。

  • SQL Server Native Clientは、perfmon では使用できません。 パフォーマンス モニターは、Windows に付属している MDAC SQLODBC ドライバーを使用する DSN のみと併用できる Windows ツールです。

  • SQL Server Native Clientが SQL Server 2005 以降のバージョンに接続されている場合、サーバー エラー 16947 がSQL_ERRORとして返されます。 このエラーは、位置指定更新または位置指定削除による行の更新や削除が失敗したときに発生します。 任意のバージョンの SQL Server に接続している MDAC では、サーバー エラー 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)xmludtまたはその他の大きなオブジェクト型の戻り値は、2005 SQL Serverより前のバージョンのクライアントに返されません。 これらの型を戻り値として使用する場合は、SQL Server Native Clientを使用する必要があります。

  • MDAC では、手動トランザクションと暗黙的トランザクションの開始時に次のステートメントを実行できますが、SQL Server Native Clientは実行されません。 これらは、自動コミット モードで実行する必要があります。

    • すべてのフルテキスト操作 (インデックスおよびカタログ DDL)

    • すべてのデータベース操作 (データベースの作成、変更、および削除)

    • 再構成

    • Shutdown

    • 強制終了

    • バックアップ

  • MDAC アプリケーションがSQL Serverに接続すると、SQL Server 2005 で導入されたデータ型は、次の表に示すように、SQL Server 2000 互換のデータ型として表示されます。

    SQL Server 2005 の型 SQL Server 2000 の型
    varchar(max) text
    nvarchar(max) ntext
    varbinary(max) image
    udt varbinary
    xml ntext

    この型マッピングは、列のメタデータに返される値に影響を与えます。 たとえば、text列の最大サイズは 2,147,483,647 ですが、SQL Server Native Client ODBC では列のvarchar(max)最大サイズがSQL_SS_LENGTH_UNLIMITEDとして報告され、OLE DB SQL Server Native Clientでは、列の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のみです。 (プログラミング用語では、「行のバージョン管理機能を使用した Read Committed トランザクション分離」は「Read Committed トランザクション」と同義語です)。

参照

SQL Server Native Client を使用したアプリケーションのビルド