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 | 切断された DataSet や DataTable オブジェクトの埋め込みと更新を行います。 |
| DbBatch | SqlBatch | サポート対象フレームワークに対して複数のコマンドを一括で送信します。 |
ライブラリが複数のデータベースプロバイダーをサポートする必要がある場合、ADO.NET抽象化に対してプログラムを行います。 アプリケーションがSQL Serverを対象にし、プロバイダー固有の機能が必要な場合は、SqlClient型を使用します。
接続されたデータへのアクセス
接続アクセスは、コマンドが実行されている間やアプリケーションが結果を読み取る間も接続を保持します。
一般的なリクエストは次の順序に従います:
- 接続文字列から
SqlConnectionを作りましょう。 - 接続を開きます。
-
SqlCommandを作成し、SqlParameter値を追加してください。 - コマンドを実行します。
- スカラー値、影響を受けた行数、または
SqlDataReaderを処理します。 - リーダー、コマンド、接続を処分する。
ほとんどのウェブAPI、サービス、ワーカー、コマンドラインアプリケーションには接続アクセスを利用しましょう。
SqlDataReader 行をストリーミングし、通常は結果全体を DataSetにロードするよりも少ないメモリを使用します。
各作業単位ごとに SqlConnection を開けて処分するのが通常のパターンです。 接続プーリングは基盤となる物理接続を再利用します。 アプリケーションの寿命の間、1つのグローバル接続を開いたままにしないでください。
切断されたデータアクセス
SqlDataAdapterSQL ServerとインメモリのDataSetまたはDataTable間でデータを転送します。 アプリケーションはメモリ内のデータを読み取ったり変更したりしている間に接続を終了し、その後再接続して更新を送信できます。
必要なときに切断されたアクセスを使う:
- データバインディングは
DataSetまたはDataTableに割り当てられます。 - インメモリ関係と制約。
- オフライン編集を後で照合するもの。
- DataAdaptersを中心に構築された既存アプリケーションとの互換性。
新しいリクエスト指向サービスなら、 SqlCommand と SqlDataReader から始めてください。切断されたオブジェクトモデルが必要な場合は別です。
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を使用してください。
SqlConnection、 SqlCommand、 SqlDataReader、 SqlTransaction は複数のスレッドからの同時使用をサポートしていません。 各同時実行に独自の接続を与え、接続プーリングに頼る。 マルチアクティブ結果セット(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 に従ってください。