Microsoft.Data.SqlClient を使用した ADO.NET アーキテクチャ

ADO.NETは.NETに組み込まれたデータアクセスモデルです。 Microsoft。Data.SqlClientは、SQL Server互換データベース向けにそのモデルを実装し、SQL Server固有の機能を追加しています。

Microsoft.Data.Sqlクライアントのランディングページは、ドライバー機能マップと本番ベースラインを提供しています。 この記事では、ドライバーがADO.NETにどのように組み込まれているかを説明します。

ADO.NET の抽象および SqlClient 型

ADO.NETはSystem.Data.Common名前空間におけるプロバイダー非依存の抽象化を定義します。 Microsoft。Data.SqlClientは具体的な実装を提供します。

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

ライブラリが複数のデータベースプロバイダーをサポートする必要がある場合、ADO.NET抽象化に対してプログラムを行います。 アプリケーションがSQL Serverを対象にし、プロバイダー固有の機能が必要な場合は、SqlClient型を使用します。

接続されたデータへのアクセス

接続アクセスは、コマンドが実行されている間やアプリケーションが結果を読み取る間も接続を保持します。

一般的なリクエストは次の順序に従います:

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

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

各作業単位ごとに SqlConnection を開けて処分するのが通常のパターンです。 接続プーリングは基盤となる物理接続を再利用します。 アプリケーションの寿命の間、1つのグローバル接続を開いたままにしないでください。

切断されたデータアクセス

SqlDataAdapterSQL ServerとインメモリのDataSetまたはDataTable間でデータを転送します。 アプリケーションはメモリ内のデータを読み取ったり変更したりしている間に接続を終了し、その後再接続して更新を送信できます。

必要なときに切断されたアクセスを使う:

  • データバインディングは DataSet または DataTableに割り当てられます。
  • インメモリ関係と制約。
  • オフライン編集を後で照合するもの。
  • DataAdaptersを中心に構築された既存アプリケーションとの互換性。

新しいリクエスト指向サービスなら、 SqlCommandSqlDataReader から始めてください。切断されたオブジェクトモデルが必要な場合は別です。

SQL Server固有の機能

Microsoft。Data.SqlClientは、プロバイダーに依存しないADO.NET契約の一部ではないAPIや接続動作を追加します:

  • Microsoft Entraの認証およびアクセストークンのコールバック。
  • TDS 8.0の厳密暗号化とSQL Server証明書オプション。
  • 常に暗号化され、安全なエンクレーブを選びます。
  • SqlBulkCopy 高スループットのデータロードのために。
  • テーブル値パラメーター
  • SQL Serverのデータ型、JSON型やベクター型など。
  • 設定可能な再試行ロジック。
  • SQL Serverの診断、統計、カウンター。
  • 可用性グループとフェイルオーバー接続オプション。

これらの機能を使うことで、そのコードはMicrosoftと結びついています。Data.SqlClient。 アプリケーションの他の部分がプロバイダーに依存しないままであれば、プロバイダー固有のコードをデータアクセス境界の後ろに残してください。

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

接続、コマンド、リーダー、トランザクション、一括コピー オブジェクトは速やかに破棄してください。 型がawait usingを実装している場合は、非同期コードではIAsyncDisposableを使用してください。

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

パッケージと名前空間

Microsoft.Data.SqlClient NuGetパッケージをインストールし、Microsoft.Data.SqlClient名前空間をインポートします。 ドライバーは.NETとは独立してリリースされるため、その機能、リリース、サポートスケジュールは.NETのランタイムとは異なります。

System.Data.SqlClient は古いプロバイダーです。 新しい開発にはMicrosoftを使いましょう。Data.SqlClientを使いましょう。 既存のアプリケーションの場合は、Migrate from System.Data.SqlClient to Microsoft.Data.SqlClient に従ってください。