在開發用戶中心時,需要查詢用戶及其權限資料,使用 MySQL 資料庫。其他表格查詢正常,唯獨權限表透過程式碼查詢後結果為空。
權限表結構如下:
CREATE TABLE `Permission` (
`PermissionID` varchar(3),
`PermissionName` varchar(100),
`CreateDate` datetime,
`CreateUserID` char(6),
`UpdateDate` datetime,
`UpdateUserID` char(6),
`ValidFlag` int(1)
)
查詢程式碼片段:
private const string SQL_GetPermissionInfo = @"SELECT PermissionID, PermissionName, CreateDate, CreateUserID, UpdateDate, UpdateUserID, ValidFlag FROM Permission WHERE 1=1";
public static DBResponse GetPermissionInfo(DBRequest dbRequest, string PermissionID) {
StringBuilder sqlStr = new StringBuilder();
sqlStr.Append(SQL_GetPermissionInfo);
MySqlParameter[] paras = null;
if (!string.IsNullOrEmpty(PermissionID)) {
paras = new MySqlParameter[] {
new MySqlParameter("@PermissionID ", PermissionID) // 注意這裡參數名稱後面多了一個空格
};
sqlStr.Append(" AND PermissionID = @PermissionID ");
}
return ExecuteDataset(dbRequest, sqlStr.ToString(), paras);
}
@ 和 ? 參數符號無關,已實測。Allow User Variables=True,否則會報錯 Fatal error encountered during command execution.問題已解決:參數化查詢時,參數名稱 "@PermissionID " 後面多寫了一個空格。修正為 "@PermissionID" 即可正常查詢。
關鍵教訓: 參數名稱必須與 SQL 語句中的佔位符完全一致,包括大小寫與空白字元,否則 MySQL 無法正確綁定參數,導致查詢條件失效而回傳空結果。