― SQL Server 2017 を使っている私が、2022 時代の“ドライバの現実”に向き合った記録 ―
私は現在、SQL Server 2017 を使ったシステムを運用しています。 アプリケーション側は .NET Framework(VB.NET)で、接続ドライバは長年おなじみの System.Data.SqlClient を利用してきました。
特に不満もなく、安定して動いているので「このままでいいだろう」と思っていたのですが、 SQL Server 2022 への移行を検討し始めたタイミングで、ある事実に気づきました。
System.Data.SqlClient は、すでにメンテナンスモードになっていたのです。
この記事では、なぜそうなったのか、そして今後どうすべきなのかを整理していきます。
■ System.Data.SqlClient は静かにメンテナンスモードへ
Microsoft は公式に次の方針を示しています。
- System.Data.SqlClient:新機能は追加されず、バグ修正のみ
- Microsoft.Data.SqlClient:SQL Server / Azure SQL の新機能はすべてこちらに実装
つまり、SQL Server が進化しても、System.Data.SqlClient は追従しません。 長年使ってきた“標準ドライバ”が、気づかないうちに世代交代していたわけです。
■ なぜ Microsoft.Data.SqlClient に分離されたのか
背景には、SQL Server と Azure SQL の急速な進化があります。
- Entra ID(旧 AAD)認証の刷新
- Always Encrypted with secure enclaves
- 新しい暗号化ポリシー(TDS 8.0)
- UTF-8 対応
- Azure SQL / Arc-enabled SQL との統合
これらは .NET Framework の枠内では対応が難しく、 SQL Server チームは独立した NuGet パッケージとして Microsoft.Data.SqlClient を開発する方向に舵を切りました。
■ SQL Server 2022 以降では、実質的に Microsoft.Data.SqlClient が前提
SQL Server 2022 の新機能は、ほぼすべて Microsoft.Data.SqlClient が前提になっています。
● Always Encrypted の強化
System.Data.SqlClient では対応が不完全です。
● 新しい暗号化ポリシー(TDS 8.0)
通信プロトコルの更新は新ドライバが必須です。
● Entra ID(旧 AAD)認証
System.Data.SqlClient は古い ADAL ベースで、今後の更新に追従できません。
● Azure SQL との統合
クラウド連携は新ドライバが前提です。
SQL Server 2022 を本格的に使うなら、 System.Data.SqlClient のままでは確実に制約が出てきます。
■ 書き換えは難しいのか
多くの開発者が気になるポイントだと思います。
● コードの書き換え自体は簡単
名前空間を変更するだけで動くケースが多いです。
Imports Microsoft.Data.SqlClient● しかし“挙動差の検証”が難しい
ここが本質です。
- 接続文字列のデフォルトが変わる
- 暗号化設定が厳格化される
- 認証方式の挙動が異なる
- 接続プールの動作が変わる
- Always Encrypted の設定が増える
- MARS の挙動差がある
特に 接続まわりと認証まわりは要検証 です。
■ SQL Server 2017 → 2022 の移行で見えてくる“ドライバの壁”
SQL Server 2017 までは System.Data.SqlClient で何も困りませんでした。 しかし 2022 になると、次のような問題が出てきます。
- 新しい暗号化ポリシーに対応できない
- Entra ID 認証がうまく動かない
- Azure SQL との接続で警告が出る
- Always Encrypted の新機能が使えない
つまり、SQL Server の進化にアプリ側が追従できなくなるのです。
■ 結論:SQL Server 2022 以降を使うなら、移行は避けられない
まとめると次のようになります。
- System.Data.SqlClient は事実上“現状維持”
- SQL Server 2022 の新機能は Microsoft.Data.SqlClient が前提
- 認証・暗号化・クラウド連携は新ドライバ必須
- 書き換えは簡単だが、検証が難しい
- SQL Server2022 以降を使うなら、最終的には移行が必要
つまり、
「いつかやる」ではなく「必ずやる」。 そのタイミングをどう最適化するかがポイントです。

コメント