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

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

重要

SQL Server Native Client (SNAC と略されることがよくあります) は、SQL Server 2022 (16.x) と SQL Server Management Studio 19 (SSMS) から削除されました。 SQL Server Native Client (SQLNCLI または SQLNCLI11) とレガシ Microsoft OLE DB Provider for SQL Server (SQLOLEDB) は、新しいアプリケーション開発には推奨されません。 今後、新しい Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server または最新の Microsoft ODBC Driver for SQL Server に切り替えてください。 SQL Server データベース エンジン (バージョン 2012 から 2019) のコンポーネントとして付属する SQLNCLI については、この「サポート ライフサイクルの例外」を参照してください。

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

このトピックの情報は、SQL Server 2005 (9.x) に含まれていた SQL Server Native Client のバージョンで MDAC (または Windows DAC) アプリケーションを最新の状態に更新するのに役立ちます。 SQL Server に付属している SQL Server Native Client のバージョンでこのアプリケーションを最新の状態にするには、「SQL Server 2005 Native Client からのアプリケーションの更新」を参照してください

Note

SQL Server Native Client が SQL Server 2022 (16.x) から削除されました。

さらに、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 (9.x) データ型を認識していないために発生する可能性のある問題を回避するために、データ型互換性オプションを使用する必要があります。

  • SQL Server Native Client では、以前の SQL Server データベースへのアクセスがサポートされています。

  • SQL Server Native Client には XML 統合が含まれていません。 SQL Server Native Client では、Standard Edition LECT ...FOR XML クエリですが、他の XML 機能はサポートされていません。 ただし、SQL Server Native Client では、SQL Server 2005 (9.x) で導入された 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 または no使用する必要があります。

  • 警告とエラーが一部変更されています。 サーバーから返された警告とエラーは、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 と共に使用することはできません。 パフォーマンス モニターは、Windows に付属している MDAC SQLODBC ドライバーを使用する DSN のみと併用できる Windows ツールです。

  • SQL Server Native Client が SQL Server 2005 (9.x) 以降のバージョンに接続されている場合、サーバー エラー 16947 はSQL_ERRORとして返されます。 このエラーは、位置指定更新または位置指定削除による行の更新や削除が失敗したときに発生します。 任意のバージョンの SQL Server に接続している MDAC では、サーバー エラー 16947 は警告 (SQL_SUCCESS_WITH_INFO) として返されます。

  • SQL Server Native Client は、IDBDataSource管理 インターフェイスを実装します。これは、以前は実装されていない省略可能な OLE DB インターフェイスですが、この省略可能なインターフェイスの CreateDataSource メソッドのみが実装されます。 この機能は、 SQL Serverの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。

  • SQL Server Native Client OLE DB プロバイダーは、TABLES および TABLE_INFO スキーマ行セットのシノニムを返し、TABLE_TYPE SYNONYM に設定します。

  • データ型 varchar(max)nvarchar(max)、varbinary(max)xmludt、またはその他のラージ オブジェクト型の戻り値は、SQL Server 2005 (9.x) より前のクライアント バージョンには返されません。 これらの型を戻り値として使用する場合は、SQL Server Native Client を使用する必要があります。

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

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

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

    • 再構成

    • Shutdown

    • 強制終了

    • バックアップ

  • MDAC アプリケーションから SQL Server に接続すると、SQL Server 2005 (9.x) で導入されたデータ型は、次の表に示すような、SQL Server 2000 (8.x) と互換性を持つデータ型として扱われます。

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

    この型マッピングは、列のメタデータに返される値に影響を与えます。 たとえば、テキスト列の最大サイズは 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 を使用すると、下位互換性の理由から、接続文字列のあいまいさ (たとえば、一部のキーワード (keyword)を複数回指定でき、競合するキーワード (keyword)が位置または優先順位に基づく解決で許可される場合があります)。 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 を使用したアプリケーションのビルド