首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Unity3D 連接 SQL Server 資料庫完整教學:DLL 部署與程式碼實作

     編輯:MySQL 資料庫相關知識

Unity3D 連接 SQL Server 資料庫完整教學:DLL 部署與程式碼實作


Unity 專案需直連 SQL Server 時,必須正確部署 ADO.NET 相關組件(System.Data.dll 及其相依),否則編輯器可運行但建置後(WebGL/Standalone)會因缺少組件而失敗。本文提供完整 DLL 部署清單、連線程式碼範例與跨平台注意事項。


必要 DLL 清單與部署步驟

DLL 檔案來源路徑(Unity 安裝目錄)部署位置說明
System.Data.dllEditor/Data/Mono/lib/mono/unity/Assets/Plugins/ADO.NET 核心
I18N.dll同目錄Assets/Plugins/國際化核心
I18N.West.dll同目錄Assets/Plugins/西歐編碼支援
I18N.CJK.dll同目錄Assets/Plugins/中日韓編碼支援(中文環境必備)
  1. 從上述路徑複製 **四個 DLL** 到專案 Assets/Plugins/ 資料夾(無則自建)。
  2. Unity 會自動偵測並包含於建置輸出。
  3. **不要**放在 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 / DatabaseExam資料庫名稱
User ID / UIDsaSQL Server 登入帳號
Password / PWD123密碼
Integrated Securitytrue / falsetrue=Windows 整合驗證(需同網域),false=SQL 驗證
Encrypt / TrustServerCertificatetrue / true強制 TLS 加密(SQL Server 2022+ 預設要求)
Connection Timeout30連線逾時秒數

跨平台建置注意事項

  • 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。

安全與架構最佳實踐

  1. 嚴禁客戶端直連生產資料庫:帳號密碼會反編譯洩露,且開放 1433 埠極度危險。
  2. 採用三層架構:Unity (Client) → HTTPS API (Server) → SQL Server (DB)。
  3. API 層處理**:認證授權、輸入驗證、參數化查詢、速率限制、審計日誌。
  4. 本地開發/單機遊戲**可直連**,但建議使用 **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 supportedWebGL 不支援原始 Socket改用 Web API 中介架構

正確部署 DLL、採用安全架構,Unity 專案即可穩定整合 SQL Server 資料服務。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved