Unity 專案直連 SQL Server 需引入 ADO.NET 組件,且發布為 WebGL/Standalone 時須處理原生 DLL 相依性。本文提供最小可行步驟與完整程式碼範例。
C:\Program Files\Unity\Editor\Data\Mono\lib\mono\unity\Assets/Plugins/ 目錄。I18N.dllI18N.West.dllI18N.CJK.dllTypeLoadException)。using System.Data;
using System.Data.SqlClient;
using UnityEngine;
public class ConnectionSqlServer : MonoBehaviour
{
void Start()
{
// 連線字串:Data Source=主機;Initial Catalog=資料庫;User ID=帳號;Password=密碼;
string connStr = "Data Source=.;Initial Catalog=Exam;User ID=sa;Password=123;";
using (var conn = new SqlConnection(connStr))
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT TOP 1 name FROM Users";
cmd.CommandType = CommandType.Text;
try
{
conn.Open();
object result = cmd.ExecuteScalar();
Debug.Log($"資料庫連線成功!首筆使用者:{result}");
}
catch (Exception ex)
{
Debug.LogError($"連線失敗:{ex.Message}");
}
}
}
}
| 項目 | 建議 |
|---|---|
| 連線字串儲存 | 勿硬編碼,使用 PlayerPrefs、ScriptableObject 或加密設定檔 |
| 連線管理 | 使用 using 確保釋放;長連線考慮連線池(Pooling=true) |
| 非同步查詢 | 主執行緒勿同步查詢,改用 async/await 或 ThreadPool 避免卡頓 |
| SQL 注入防護 | 全程使用參數化 cmd.Parameters.AddWithValue("@p", val) |
| WebGL 限制 | 瀏覽器沙箱禁止 TCP 直連,**必須改走 WebAPI/REST**;本方案僅適用 Standalone/行動裝置 |
FileNotFoundException: System.Data.dll → 未放入 Assets/Plugins 或路徑錯誤。TypeLoadException: I18N... → 發布缺少三個 I18N DLL。SqlException: Login failed → 檢查 SQL Server 混合驗證模式、防火牆 1433 埠、帳號鎖定。PlatformNotSupportedException → WebGL/IL2CPP 不支援 System.Data.SqlClient,需改用 Microsoft.Data.SqlClient + 原生外掛或改架構。客戶端直連資料庫不適合公開發布專案(暴露連線字串、繞過業務邏輯、難以擴展)。生產專案建議:
本文方案適用於內部工具、原型驗證、單機離線遊戲等受控環境。