已完成 2024年6月 - 2024年6月
Wyrm 資料庫檢索工具
以 C# Windows Forms 開發的 MariaDB 資料庫管理工具,提供直覺的圖形化介面來執行 SQL 查詢、匯出 CSV 資料與管理 JSON 配置的資料庫連線。
C# Database GUI SQL-Client School Project
專案簡介
Wyrm-DB GUI 是一個專為 MariaDB 資料庫查詢與管理設計的 Windows Form 應用程式,旨在為汽車公司資料庫系統提供直觀、易用的圖形化操作介面。本專案作為資料庫期末專案(DB_FinalProject)的延伸,將複雜的 SQL 查詢語句轉化為視覺化的使用者體驗,讓使用者無需深入了解 SQL 語法即可進行資料庫連線、查詢執行與結果匯出等操作。
核心理念
- 使用者友善設計:簡化資料庫操作流程,降低技術門檻
- 視覺化資料呈現:以 DataGridView 清晰展示查詢結果
- 彈性查詢支援:支援自訂 SQL 查詢與範例資料庫快速測試
- 安全性考量:敏感資料(OAuth 憑證、資料庫密碼)採用外部配置檔管理
我的職責
作為本專案的主要開發者之一,我與 吳傢澂 共同協作完成以下工作:
系統架構設計
- 設計 Windows Forms 應用程式架構,實現 Model-View-Controller 分離
- 建立 MariaDB 連線管理模組,處理連線生命週期與錯誤處理
- 設計外部配置檔機制(JSON),分離敏感資料與程式碼
核心功能實作
- 資料庫連線管理:實作 IP、Port、Database、Username、Password 驗證與連線建立
- SQL 查詢執行引擎:支援單一查詢與批次查詢(程式列),處理查詢結果與錯誤訊息
- 範例資料庫系統:從
UserConfigs/exampleDbConfig.json載入預設連線資訊與範例查詢 - 結果匯出功能:將 DataGridView 資料匯出為 CSV 格式
- UI/UX 設計:實作按鈕淡入淡出動畫、狀態指示器、使用者手冊視窗
測試與維護
- 測試與 DB_FinalProject 資料庫的整合(汽車公司資料庫架構)
- 處理 MariaDB 常見錯誤(NU1301、401/403 認證錯誤)
- 優化查詢效能與 UI 回應速度
核心功能
1. 資料庫連線管理
- 連線參數驗證:檢查伺服器 IP 格式、端口範圍、必填欄位
- 連線狀態指示:視覺化顯示連線成功/失敗狀態
- 動態表格載入:連線成功後自動列出資料庫中的所有資料表
2. SQL 查詢執行
- 互動式查詢介面:
Enter鍵:送出單一查詢Shift + Enter:將查詢加入程式列Alt + Enter:清空程式列與已儲存查詢
- 批次查詢支援:程式列機制允許依序執行多個 SQL 語句
- 結果視覺化:DataGridView 即時顯示查詢結果
- 錯誤捕捉:捕捉並顯示 SQL 語法錯誤與執行錯誤訊息
3. 範例資料庫整合
外部配置檔載入:從
UserConfigs/exampleDbConfig.json讀取預設連線資訊{ "Server": "your_server_ip", "Port": "your_port", "Database": "your_database", "User": "your_username", "Password": "your_password" }範例查詢預載:支援預定義的常用查詢語句快速測試
安全性設計:配置檔不納入版本控制,保護敏感資訊
4. 資料匯出功能
- CSV 格式匯出:將查詢結果匯出為逗號分隔值檔案
- 自訂儲存路徑:使用者可選擇檔案名稱與儲存位置
- 欄位標題保留:匯出時包含資料表欄位名稱
5. 使用者體驗優化
- 動畫效果:按鈕淡入淡出效果提升互動體驗
- 使用者手冊:內建說明視窗(模態/非模態可選)
- 快捷鍵支援:常用操作提供鍵盤快捷鍵
- 狀態回饋:即時顯示連線狀態、查詢進度
使用技術
核心框架
- Windows Forms:.NET Framework 4.7.2 桌面應用程式框架
- C#:主要開發語言
- Visual Studio:整合開發環境
資料庫連線
- MySql.Data (8.4.0):MariaDB/MySQL .NET Connector
- ADO.NET:資料庫操作抽象層
- System.Data:DataTable、DataGridView 資料處理
資料處理與序列化
- Newtonsoft.Json (13.0.3):JSON 配置檔解析
- System.Text.RegularExpressions:IP 位址與輸入驗證
UI 組件
- DataGridView:查詢結果呈現
- TextBox:SQL 查詢輸入
- ToolStrip/MenuStrip:選單列與工具列
- SaveFileDialog:CSV 匯出檔案選擇
依賴套件
- BouncyCastle.Cryptography (2.4.0):加密支援
- Google.Protobuf (3.27.1):序列化支援
- K4os.Compression.LZ4 (1.3.8):資料壓縮
專案狀態
當前版本:v1.2.0(已發布)
- 核心功能狀態:所有主要功能已完成並穩定運行
- 整合測試:已與 DB_FinalProject 資料庫完整整合測試
功能完成度
- ✅ 已完成:
- 資料庫連線與驗證機制
- SQL 查詢執行與結果顯示
- 範例資料庫配置系統
- CSV 匯出功能
- 使用者手冊與說明文件
- UI/UX 動畫與互動設計
- 🔄 計畫中(待辦事項):
- 增加多語言支援(目前僅繁體中文介面)
- 支援不同資料庫架構(目前針對汽車公司資料庫優化)
- 支援更複雜的 SQL 查詢(如 JOIN、子查詢視覺化)
- 新增更多資料庫操作(CREATE、UPDATE、DELETE 的 GUI 支援)
開發挑戰與收穫
1. MariaDB 連線穩定性管理
挑戰:如何處理網路中斷、連線逾時、資料庫伺服器無回應等異常情況?
解決方案:
- 實作完整的 try-catch 錯誤捕捉機制
- 使用
MySqlConnection.State檢查連線狀態 - 提供視覺化的連線狀態指示(已連線/已斷線)
- 連線失敗時提供明確的錯誤訊息與重試建議
收穫:
- 深入理解 ADO.NET 連線池管理
- 學習資料庫連線生命週期管理
- 掌握異常處理的最佳實踐
2. SQL 查詢結果動態綁定
挑戰:不同 SQL 查詢回傳的欄位數量與類型不固定,如何動態顯示於 DataGridView?
解決方案:
- 使用
DataTable作為中間資料結構 - 利用
MySqlDataAdapter.Fill()自動填充 DataTable - DataGridView 自動根據 DataTable 架構調整欄位顯示
- 處理 NULL 值與特殊字元顯示
收穫:
- 掌握 DataTable 與 DataGridView 的資料綁定機制
- 學習泛型資料處理技巧
- 理解資料庫結果集的動態處理
3. 敏感資料安全管理
挑戰:如何在不將資料庫密碼提交至 GitHub 的情況下,仍能支援範例資料庫功能?
解決方案:
- 設計外部 JSON 配置檔機制(
exampleDbConfig.json) - 在
.gitignore中排除配置檔 - 提供
Example Database Usage.txt說明文件指導使用者建立配置 - 實作配置檔存在性檢查,未配置時停用範例資料庫按鈕
收穫:
- 學習應用程式配置管理最佳實踐
- 理解敏感資料保護的重要性
- 掌握 JSON 序列化與反序列化技術
4. 批次查詢程式列設計
挑戰:如何讓使用者能夠依序執行多個 SQL 查詢,並管理查詢歷史?
解決方案:
- 實作
Queue<string>儲存查詢佇列 - 使用
Stack<string>管理查詢歷史 - 提供快捷鍵組合(Enter、Shift+Enter、Alt+Enter)對應不同操作
- 視覺化顯示目前程式列狀態
收穫:
- 掌握資料結構(Queue、Stack)在實務中的應用
- 學習使用者操作流程設計
- 理解鍵盤事件處理與快捷鍵實作
5. 協作開發與程式碼整合
挑戰:與協作者共同開發時,如何確保程式碼風格一致與功能不衝突?
解決方案:
- 使用 Git 進行版本控制與分支管理
- 定期進行程式碼審查與整合測試
- 建立清晰的開發文件與註解
- 透過 GitHub Issues 追蹤任務與 Bug
收穫:
- 提升團隊協作能力
- 學習程式碼審查與重構技巧
- 理解軟體開發生命週期管理
應用程式執行截圖