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

SQL Native Client と MDAC (Microsoft Data Access Components) には多くの違いがあります。どちらを使用しても SQL Server データベースへのネイティブ データ アクセスは可能ですが、SQL Native Client は、旧バージョンとの互換性を維持しながら、SQL Server 2005 の新機能を公開することを主眼において作成されています。

また、MDAC には OLE DB、ODBC、および ADO (ActiveX Data Objects) を使用するためのコンポーネントが含まれていますが、SQL Native Client には、OLE DB と ODBC しか実装されていません (ただし、ADO から SQL Native Client の機能にアクセスすることはできます)。

SQL Native Client と MDAC のその他の違いを次に示します。

  • ADO を使用して SQL Native Client プロバイダにアクセスした場合に使用できるフィルタ機能は、同じユーザーが SQL OLE DB プロバイダにアクセスした場合よりも少ないことがあります。

  • ADO アプリケーションで SQL Native Client を使用している場合に計算列の更新を試みると、エラーが報告されます。MDAC では、更新が受け付けられたうえで、無視されていました。

  • SQL Native Client は、1 つの自己完結型 DLL (ダイナミック リンク ライブラリ) ファイルです。配布を容易にすることと、セキュリティの危険にさらされるのを防ぐことの両面から、最小限のインターフェイスしか公開されません。

  • OLE DB インターフェイスと ODBC インターフェイスのみがサポートされます。

  • SQL Native Client OLE DB プロバイダ名と SQL Native Client ODBC ドライバ名は、MDAC で使用されるものと異なります。

  • SQL Native Client には、主要な MDAC コンポーネントでは提供されている、ユーザーがアクセスできる機能が含まれていません。この機能には、接続プーリング、ADO サポート、メモリ管理、クライアント カーソルのサポートなどがあります。このような機能は、基になる MDAC オペレーティング システムをインストールすることにより公開されます。

  • アプリケーションでは、SQL Native Client と共に OLE DB Core Services を使用できます。ただし、OLE DB カーソル エンジンを使用している場合、このカーソル エンジンでは新しい SQL Server 2005 のデータ型が認識されないので、アプリケーションでデータ型互換性オプションを使用して、問題が発生しないようにする必要があります。

  • SQL Native Client では、SQL Server 7.0 以降の旧バージョンの SQL Server データベースにアクセスできます。

  • SQL Native Client には、XML の統合は含まれていません。SELECT … FOR XML クエリはサポートされますが、その他の XML 機能はサポートされません。ただし、新しい SQL Server 2005 xml データ型はサポートされます。

  • SQL Native Client では、接続文字列の属性のみを使用する、クライアント側のネットワーク ライブラリの構成がサポートされます。ネットワーク ライブラリをさらに詳細に構成する場合は、SQL Server 構成マネージャを使用する必要があります。

  • SQL Native Client には、odbcbcp.dll との互換性がありません。このため、アプリケーションで ODBC API と bcp API の両方を使用している場合は、アプリケーションをリビルドして sqlncli.lib とリンクし、SQL Native Client を使用できるようにする必要があります。

  • SQL Native Client は、MSDASQL (ODBC 用 Microsoft OLE DB プロバイダ) など、廃止された MDAC コンポーネントからはサポートされません。廃止された MDAC コンポーネントの詳細については、「データ アクセス テクノロジのロードマップ」を参照してください。

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

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

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

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

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

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

  • SQL Native Client には、以前は実装されていなかった、省略可能な OLE DB インターフェイスの IDBDataSourceAdmin インターフェイスが実装されています。ただし、この省略可能なインターフェイスに実装されているのは CreateDataSource メソッドのみです。

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

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

  • 手動および暗黙のトランザクション開始時において、以下のステートメントの実行が MDAC では許可されていましたが、SQL Native Client では許可されません。これらは、自動コミット モードで実行する必要があります。

    • すべてのフルテキスト操作 (インデックスおよびカタログ DDL)
    • すべてのデータベース操作 (データベースの作成、変更、および削除)
    • Reconfigure
    • Shutdown
    • Kill
    • Backup
  • MDAC アプリケーションから SQL Server 2005 に接続すると、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 Native Client ODBC では、varchar(max) 型の列の最大サイズを SQL_SS_LENGTH_UNLIMITED と報告し、SQL Native Client OLE DB では、プラットフォームに応じて、varchar(max) 型の列の最大サイズを 2,147,483,647 または -1 と報告します。

  • SQL Native Client では、旧バージョンとの互換性のために接続文字列に幅広い意味を持たせることができます。たとえば、キーワードを複数回指定したり、位置と優先順位に基づいた解決方法を使用して、競合するキーワードを指定することができます。SQL Native Client の今後のリリースでは、接続文字列に幅広い意味を持たせることができなくなる予定です。SQL Native Client を使用するアプリケーションでは、幅広い意味を持つ接続文字列を利用しないように変更することをお勧めします。

  • ODBC または OLE DB 呼び出しを使用してトランザクションを開始した場合、SQL Native Client と MDAC とでは動作が異なります。SQL Native Client ではトランザクションがすぐに開始されますが、MDAC では最初のデータベース アクセスの後にトランザクションが開始されます。これはストアド プロシージャとバッチの動作に影響を与える可能性があります。SQL Server では、バッチまたはストアド プロシージャの実行開始時と実行終了後で @@TRANCOUNT の値が同じである必要があるためです。詳細については、「ストアド プロシージャとトリガでのロールバックとコミット」を参照してください。

  • SQL Native Client で ITransactionLocal::BeginTransaction を使用すると、トランザクションが直ちに開始します。MDAC では、暗黙のトランザクション モードを必要とするステートメントをアプリケーションが実行するまで、トランザクションの開始が遅延されました。詳細については、「SET IMPLICIT_TRANSACTIONS (Transact-SQL)」を参照してください。

行バージョン管理機能を使用した Read Committed トランザクション分離は SQL Native Client と MDAC の両方でサポートされていますが、スナップショット トランザクション分離は SQL Native Client のみでサポートされています (プログラミング用語では、「行バージョン管理機能を使用した Read Committed トランザクション分離」は「Read Committed トランザクション」と同義語です)。詳細については、「行のバージョン管理に基づく分離レベルの選択」を参照してください。

参照

その他の技術情報

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

ヘルプおよび情報

SQL Server 2005 の参考資料の入手