Microsoft。Data.Sqlクライアント名前空間と互換性

Microsoft.Data.SqlClient名前空間には、SQL Server互換データベースに対応したサポートされた.NETデータプロバイダーが含まれています。 System.Data.SqlClientのフォークとして始まり、おなじみのADO.NETプログラミングモデルを維持しつつ、.NETランタイムとは独立して新しいSQL Server機能をリリースしています。

新しい開発には Microsoft.Data.SqlClient を使用します。

名前空間をインストールしてインポートしてください

NuGetパッケージの追加:

dotnet add package Microsoft.Data.SqlClient

名前空間をインポートする:

using Microsoft.Data.SqlClient;

ほとんどのアプリケーションは SqlConnection、 SqlCommand、 SqlParameter、 SqlDataReader、 SqlTransactionを使用します。 完全な公開サーフェスについては、Microsoft.Data.SqlClient API参照を参照してください。

ADO.NETとの関係

ADO.NETは.NETに組み込まれたデータアクセスモデルです。 System.Data.Common名前空間におけるプロバイダー非依存の抽象化を定義し、Microsoft.Data.SqlClientは具体的な実装を提供します。

ADO.NET抽象化 SqlClient タイプ Purpose
DbConnection SqlConnection 1つのデータベースへの論理的な接続を開きます。
DbCommand SqlCommand Transact-SQL(T-SQL)テキストやストアドプロシージャを実行します。
DbParameter SqlParameter コマンドテキストとは別にタイプされた値を送信します。
DbDataReader SqlDataReader サーバーから結果行を順次転送します。
DbTransaction SqlTransaction コマンドを1つのトランザクションにまとめ、ひとまとまりとしてコミットまたはロールバックを行います。
DbDataAdapter SqlDataAdapter 切断された DataSet や DataTable オブジェクトの埋め込みと更新を行います。
DbBatch SqlBatch サポート対象フレームワークに対して複数のコマンドを一括で送信します。

Microsoft.Data.SqlClientはまた、以下のようなSQL Server固有のAPIも提供しています:

  • SqlBulkCopy
  • SqlConnectionStringBuilder
  • SqlConfigurableRetryFactory
  • SqlDependency
  • SQL Server固有の認証、暗号化、データ型のサポート

ライブラリが複数のデータベースプロバイダーをサポートする必要がある場合、ADO.NET抽象化に対してプログラムを行います。 SQL Serverを対象にし、Microsoft Entra認証、Always Encrypted、バルクコピー、テーブル値パラメータ、設定可能なリトライロジックなどのプロバイダー固有の機能が必要な場合にSqlClientタイプを使用します。 アプリケーションの他の部分がプロバイダーに依存しないままであれば、プロバイダー固有のコードをデータアクセス境界の後ろに残してください。

接続済みと接続解除済みのアクセス

接続アクセスは 、コマンドが実行されている間やアプリケーションが結果を読み取る間も接続を開いたままにします。 典型的なリクエストは以下の順序に従います。

  1. 接続文字列からSqlConnectionを作成し、それを開いてください。
  2. SqlCommandを作成し、SqlParameter値を追加してください。
  3. コマンドを実行します。
  4. スカラー値、影響を受けた行数、または SqlDataReaderを処理します。
  5. リーダー、コマンド、接続を処分する。

ほとんどのウェブAPI、サービス、ワーカー、コマンドラインアプリケーションには接続アクセスを利用しましょう。 SqlDataReader 行をストリーミングし、通常は結果全体を DataSetにロードするよりも少ないメモリを使用します。

非接続アクセス は SqlDataAdapter を用いてデータをインメモリの DataSet や DataTable にコピーします。 アプリケーションはメモリ内のデータを読み取ったり変更したりしている間に接続を終了し、その後再接続して更新を送信できます。 データ バインド、メモリ内リレーションや制約、後で同期を行うオフライン編集、DataAdapters を基盤として構築された既存のアプリケーションなどで使用します。 新しいリクエスト指向サービスについては、まず SqlCommand と SqlDataReaderから始めましょう。

オブジェクトの寿命と並行性

各作業単位ごとに SqlConnection を開いて破棄してください。 接続プーリングは基礎となる物理接続を再利用するため、アプリケーションの寿命の間ずっと一つのグローバル接続を開いたままにしないでください。 接続、コマンド、リーダー、トランザクション、一括コピー オブジェクトは速やかに破棄してください。 非同期コードでは、ターゲット フレームワークで SqlConnection を実装する型には IAsyncDisposable を使用します。.NET では SqlDataReader や await using などがこれに該当します。また、using のみを実装する型には通常の IDisposable を使用します。たとえば SqlBulkCopy などです。

SqlConnection、 SqlCommand、 SqlDataReader、 SqlTransaction は複数のスレッドからの同時使用をサポートしていません。 各同時実行に独自の接続を与え、接続プーリングに頼る。 マルチアクティブ結果セット(MARS)は、接続上で複数のアクティブ結果セットを許可しますが、SqlClientオブジェクトをスレッド安全にするわけではありません。

System.Data.SqlClient との関係

System.Data.SqlClientは.NETフレームワークおよび以前の.NETリリースを搭載している古いプロバイダーです。 Microsoft.Data.SqlClient 多くのタイプ名を使用していますが、パッケージ、名前空間、デフォルト、機能、サポートポリシーが異なります。

新しい申請コードで両方の提供者を言及しないでください。 同じ名前のタイプは2つのパッケージで互換性がありません。 例えば、 System.Data.SqlClient.SqlConnectionは Microsoft.Data.SqlClient.SqlConnection が必要な場所では通過できません。

移行は通常、 Microsoft.Data.SqlClient パッケージの追加と名前空間の参照変更から始まりますが、接続暗号化、パラメータ、設定、推移依存関係、実行時の挙動も確認する必要があります。 デプロイする前に、System.Data.SqlClient から Microsoft.Data.SqlClient への移行に従ってください。

バージョン互換性

ドライバーパッケージのバージョンは、アプリケーションの.NETバージョンやデータベースエンジンバージョンとは独立しています。 3つすべてをチェックしてください:

Component 確認する内容
Microsoft.Data.SqlClient リリースラインはサポートされており、アプリケーションが使用する機能が含まれています。
.NET または .NET フレームワーク アプリケーションはそのドライバーリリースでサポートされているランタイムをターゲットにします。
SQL Server互換データベース ドライバリリースはデータベースバージョンをサポートし、サーバーはTDS 8.0などの要求されたプロトコル機能もサポートします。

現在の行列については、 SqlClientドライバーのサポートライフサイクルを参照してください。

バージョン固有の変更

ドライバーのリリースはAPIの追加、オプション依存関係の移動、安全なデフォルトの変更が可能です。 小さな更新や大きな更新の前に変更点を確認しましょう。

その例は次のとおりです。

  • バージョン4.0では Encrypt デフォルトが trueに変更されました。
  • バージョン5.0ではTDS 8.0用の SqlConnectionEncryptOption と Encrypt=Strict が導入されました。
  • バージョン5.2では、対応するモダン.NETターゲットにSqlBatchが導入されました。
  • バージョン7.0では、ドライバー提供のMicrosoft Entra認証がMicrosoft.Data.SqlClient.Extensions.Azureに移行されました。

リリース ノートへのリンクとアップグレードの概要については、Microsoft.Data.SqlClient の新機能をご覧ください。

一部の機能はメイン名前空間外の型やオプションパッケージを使用します。

名前空間またはパッケージ Purpose
Microsoft.Data.SqlClient.Server SqlDataRecordおよびSqlMetaDataのSqlClient実装。
Microsoft.Data.SqlTypes SqlFileStream、SqlJson、SqlVector<T>などのSqlClient固有のタイプです。
Microsoft.Data.SqlClient.Diagnostics 厳密に型指定された診断イベントのペイロード。
Microsoft.Data.SqlClient.Extensions.Azure バージョン 7.0 以降のドライバーによって提供される Microsoft Entra 認証
Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider Always Encrypted 向けの Azure Key Vault 統合。

名前空間だけでパッケージ要件を推測しないでください。 特集記事と、使用するドライバーバージョンのNuGetパッケージ依存情報に従ってください。