首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MySQL 參數化查詢回傳空結果?小心參數名稱多餘空格!

     編輯:程式設計疑難解答

問題背景

在開發用戶中心時,需要查詢用戶及其權限資料,使用 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);
}

排查過程

  1. 確認 @ 和 ? 參數符號無關,已實測。
  2. 連接字串已加 Allow User Variables=True,否則會報錯 Fatal error encountered during command execution.
  3. 懷疑是資料表問題,但無法定位具體原因。

解決方案

問題已解決:參數化查詢時,參數名稱 "@PermissionID " 後面多寫了一個空格。修正為 "@PermissionID" 即可正常查詢。

關鍵教訓: 參數名稱必須與 SQL 語句中的佔位符完全一致,包括大小寫與空白字元,否則 MySQL 無法正確綁定參數,導致查詢條件失效而回傳空結果。

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