本文主要記錄在 ARM 系統下無法連接配接SQL Server 2008 R2 的解決過程。
解決方案是使用 ODBC 的方式連接配接資料庫,進行操作。
手上有公司的華為鲲鵬雲計算 ARM 架構的 CentOS8 伺服器,
想要在上面部署 ASP .Net Core WebAPI 站點,連接配接資料庫。
同僚在使用 SqlSugar 連接配接資料庫時,無法連接配接,找我讨論解決方案。
參考資料 GitHub(Issues)
并根據以上資料給出了結論,
無法連接配接是因為 SqlSugar 裡連接配接資料庫的包是 System.Data.SqlClient,
而這個包在 Linux 系統下最低隻支援 SP3。
解決方案隻能給伺服器系統打上 SP3 的更新檔,
或者将 SQL Server 2008 SP2 更新為 2012。
這個結論第一反應就是,XX微軟,又坑人。
但是我記得 SqlClient 這個包改過一次名字,Microsoft.Data.SqlClient ,
除了系統打更新檔和更新資料庫,在代碼層面上,應該有别的解決方案。
我自己常用的ORM架構是 FreeSQL,它是支援 SQL Server 2005 的。
FreeSql.Provider.SqlServer 基于 SqlServer 2005+
果斷把我自己的項目放到ARM伺服器上試了試。結果不太行,也是無法連接配接。
連接配接阿裡雲ECS上的 MySQL 時,可以正常連接配接資料庫。
但是在連接配接 SQL Server 2008 時,一直提示無法連接配接到資料庫。
在咨詢 葉老闆 後,他建議我試試 ODBC 模式。
就去查了下這個模式是什麼,以及和 SqlClient 的差別。
What are the pros and cons of OleDB versus SQLClient?
感覺可以試試看,就開始折騰。
最終是實作了資料庫的連接配接。
在 nuget 安裝 FreeSql.Provider.Odbc 包,
代碼中修改,将 FreeSqlBuilder 的 DataType 從 SqlServer 切換成 OdbcSqlServer
配置連接配接字元串,appsettings.json
注意,ODBC的連接配接字元串是特殊的,參考資料:
ODBC-sql-server
這裡為什麼會有兩個連接配接字元串,在使用 FreeSQL ODBC 的時候,
一直提示 masterConnectionString 字段沒有值,我暫時沒處理,想解決核心關鍵問題。
接下來是要在目标伺服器上安裝 ODBC,參考資料:
ODBC-linux
由于伺服器是 ARM 架構,所要安裝 UnixODBC
這裡搜尋 yum 源,因為伺服器是ARM64架構,
需要找到 aarch64 的包進行安裝,執行安裝指令。
安裝完成後,執行指令,檢視配置資訊。
安裝的 ODBC 驅動都儲存在 /etc/odbcinst.ini ,進行列印檢視。

cat /etc/odbcinst.ini
這裡可以看到,連接配接資料庫使用的 MS SQL Driver 的名稱是 FreeTDS ,
就需要修改連接配接字元串裡的驅動名稱。
驅動配置裡有兩行注釋的提示語,嗯,這兩句是有用的,
意思是想要啟動 unixODBC ,需要 freetds-libs 庫。
根據提示,搜尋 freetds ,找到了 freetds.aarch64 。
安裝 freetds.aarch64 。
接下來就可以使用 FreeSQL.ODBC 正常通路資料庫了。