之前在升級 .NET 8 時曾踩到 System.Data.SqlTypes.SqlGuid 相容問題,當時文章有提過:2019 年推出 Microsoft.Data.SqlClient 時 .NET Team 便已揭示其將取代 System.Data.SqlClient 的政策

在 Microsoft.Data.SqlClient 推出後,System.Data.SqlClient 只會針對重大 Bug 及安全問題做更新,只要不用新功能,System.Data.SqlClient 還可以用「很多年(Many Years)」沒問題。新功能將只會加入 Microsoft.Data.SqlClient,建議選擇適當時機從 System.Data.SqlClient 換成 Microsoft.Data.SqlClient。

我當時的結論是:時代的巨輪向來不等人,只會輾人。專案還在用 System.Data.SqlClient 的話要有心理準備,「新功能沒有,小問題不修,還能繼續用,早換早解脫」將是未來幾年的寫照。

thumbnail

前幾天,.NET Team 部落格有篇新文章 - Announcement: System.Data.SqlClient package is now deprecated ,揭曉當年說的「還可用很多年」到底是幾年。

文章提到 System.Data.SqlClient 套件的退休時程已拍板定案,共分為三個時間點:

  1. .NET 9 GA 前 (2024/11)
    • 新推出的 System.Data.SqlClient 5.0.0 版, 將不再支援 .NET 7 (含)以前、.NET Framework 4.6.1 (含)以前的版本
    • 只會有 .NET 8、.NET Standard 2.0、.NET Framework 4.6.2 的 .dll,前二者會加上已過時(Obsolete)不建議使用的警示
  2. .NET 9 GA 後
    • 不支援在 .NET 9+ 使用 System.Data.SqlClient
  3. .NET 8 EOL 後 (2026/11)
    • System.Data.SqlClient 將不再包含 .NET 8 .dll,但繼續支援 .NET Framework 4.6.2
    • 若有安全更新會透過 .NET Framework 更新,套件本身不再更新
    • 套件將繼續支援 .NET Framework 4.6.2+ (預計 2029 EOS),故不會被標為過時 (Deprecated)

因此,依 .NET 版本不同,System.Data.SqlClient 結束支援的時間點也不同,整理如下:

.NET 版本System.Data.SqlClient
4.8.6
System.Data.SqlClient 5+
.NET 9 GA (2024/11) 前
System.Data.SqlClient 5+
.NET 9 GA (2024/11) 後
System.Data.SqlClient 5+
.NET 8 EOL (2026/11) 後
.NET Framework 4.6.1-✅️
.NET Framework 4.6.2+✅️✅️✅️✅️
.NET Standard 2.0✅️✅️ (過時警告)✅️ (過時警告)
.NET 6✅️
.NET 8✅️✅️ (過時警告)✅️ (過時警告)
.NET 9+

簡單結論:

如果是 .NET Framework 專案,請升級到 .NET Framework 4.6.2+ (延伸閱讀:.NET Framework 技術支援終止期限(EOS)整理),System.Data.SqlClient 可安心使用到 .NET Framework EOS 為止(預計到 2029,但我猜會再多續命幾年),但不會再有新功能了。

.NET 6 只能繼續用 System.Data.SqlClient 4.8.6,不能升級 5.0.0。

.NET 8 在 2026/11 EOL 前還可以用 System.Data.SqlClient 5+,但會出現過時警告,EOL 後 System.Data.SqlClient 若有更新也不會再提供 .NET 8 適用的 .dll。(但我懷疑 2026/11 後 System.Data.SqlClient 還會繼續更新?)

如果是用 .NET 6+ 開發,強烈建議改用 Microsoft.Data.SqlClient,不用煩惱這些有的沒的,你遲早要改 Microsoft.Data.SqlClient 的,何不現在就改。

System.Data.SqlClient 轉 Microsoft.Data.SqlClient 難不難?我對一個半大不小的專案做過升級,過程還算平和沒動怒 XD,修改處不多,沒遇到刁鑽問題。經驗供參:.NET 8 之路 - System.Data.SqlClient 轉移 Microsoft.Data.SqlClient 經驗一則

The blog discusses the deprecation timeline of the System.Data.SqlClient package and suggests transitioning to Microsoft.Data.SqlClient. System.Data.SqlClient will gradually lose support across various .NET versions, urging developers to switch to Microsoft.Data.SqlClient for continued updates and new features.


Comments

# by Anonymous

等一下我來歪樓 所以 Windows 12 還有 .Net Framework 4.6.2 Windows 13 就沒有了!?

# by K

其實不是不想改,是老闆不想花錢升級資料庫。 SQL2000 路過

Post a comment