Unity3D 連接 SQL Server 資料庫完整教學:DLL 部署與程式碼實作
Unity 專案需直連 SQL Server 時,必須正確部署 ADO.NET 相關組件(System.Data.dll 及其相依),否則編輯器可運行但建置後(WebGL/Standalone)會因缺少組件而失敗。本文提供完整 DLL 部署清單、連線程式碼範例與跨平台注意事項。
必要 DLL 清單與部署步驟
| DLL 檔案 | 來源路徑(Unity 安裝目錄) | 部署位置 | 說明 |
| System.Data.dll | Editor/Data/Mono/lib/mono/unity/ | Assets/Plugins/ | ADO.NET 核心 |
| I18N.dll | 同目錄 | Assets/Plugins/ | 國際化核心 |
| I18N.West.dll | 同目錄 | Assets/Plugins/ | 西歐編碼支援 |
| I18N.CJK.dll | 同目錄 | Assets/Plugins/ | 中日韓編碼支援(中文環境必備) |
- 從上述路徑複製 **四個 DLL** 到專案
Assets/Plugins/ 資料夾(無則自建)。
- Unity 會自動偵測並包含於建置輸出。
- **不要**放在
Assets/ 根目錄,需在 Plugins/ 才會被建置管線正確處理。
連線程式碼範例(C#)
using System.Data;
using System.Data.SqlClient;
using UnityEngine;
public class SqlServerConnector : MonoBehaviour
{
void Start()
{
// 連線字串:Data Source=伺服器;Initial Catalog=資料庫;User ID=帳號;Password=密碼
// 本機預設實例用 "." 或 "(local)",具名實例用 ".\\SQLEXPRESS"
string connStr = "Data Source=.;Initial Catalog=Exam;User ID=sa;Password=123;";
using (var conn = new SqlConnection(connStr))
using (var cmd = new SqlCommand("SELECT * FROM Users", conn))
{
try
{
conn.Open();
object result = cmd.ExecuteScalar(); // 取第一欄第一列
Debug.Log($"資料庫連線成功! 第一筆資料: {result}");
}
catch (Exception ex)
{
Debug.LogError($"連線失敗: {ex.Message}");
}
}
}
}
連線字串關鍵參數
| 參數 | 範例 | 說明 |
| Data Source / Server | ., (local), 192.168.1.100, .\SQLEXPRESS | 伺服器位址/實例名 |
| Initial Catalog / Database | Exam | 資料庫名稱 |
| User ID / UID | sa | SQL Server 登入帳號 |
| Password / PWD | 123 | 密碼 |
| Integrated Security | true / false | true=Windows 整合驗證(需同網域),false=SQL 驗證 |
| Encrypt / TrustServerCertificate | true / true | 強制 TLS 加密(SQL Server 2022+ 預設要求) |
| Connection Timeout | 30 | 連線逾時秒數 |
跨平台建置注意事項
- Standalone (Windows/Mac/Linux):Mono 執行時期內建 System.Data,但 **I18N.* 仍需手動複製**,否則中文查詢會亂碼或拋出
TypeLoadException。
- WebGL:**無法直接使用 System.Data.SqlClient**(瀏覽器沙箱禁止 TCP 連線)。需改用 **Web API(ASP.NET Core / Node.js)作為中介**,Unity 呼叫 HTTP/WebSocket,由伺服器端連接資料庫。
- Android/iOS:IL2CPP 編譯支援 System.Data,但需在
Player Settings → Other Settings → Configuration 設定 Api Compatibility Level: .NET 4.x,並同樣包含 I18N.* DLL。
安全與架構最佳實踐
- 嚴禁客戶端直連生產資料庫:帳號密碼會反編譯洩露,且開放 1433 埠極度危險。
- 採用三層架構:Unity (Client) → HTTPS API (Server) → SQL Server (DB)。
- API 層處理**:認證授權、輸入驗證、參數化查詢、速率限制、審計日誌。
- 本地開發/單機遊戲**可直連**,但建議使用 **SQLite (System.Data.SQLite)** 或 **LiteDB** 等嵌入式資料庫,零部署、無網路依賴。
常見錯誤排查
| 錯誤訊息 | 原因 | 解決 |
| TypeLoadException: System.Data.SqlClient.SqlConnection | 缺少 System.Data.dll 或 I18N*.dll | 確認四個 DLL 皆在 Assets/Plugins/ |
| SqlException: A network-related or instance-specific error | 伺服器位址錯誤、防火牆阻擋、SQL Server 未啟用 TCP/IP | 檢查連線字串、SQL Server 設定管理器啟用 TCP/IP、防火牆開放 1433 |
| SqlException: Login failed for user | 帳號/密碼錯誤、未啟用 SQL Server 驗證模式 | SSMS 登入 → 伺服器屬性 → 安全性 → SQL Server and Windows Authentication mode |
| WebGL 建置錯誤: System.Net.Sockets not supported | WebGL 不支援原始 Socket | 改用 Web API 中介架構 |
正確部署 DLL、採用安全架構,Unity 專案即可穩定整合 SQL Server 資料服務。