執行如下 ADO.NET 程式碼時,拋出例外:「'user' 附近有語法錯誤」:
string sql = "select * from user where grade > (select grade from user where id=" + id + ")";
user 是 SQL Server 保留關鍵字(系統檢視表 sys.users 等),直接作為資料表名稱會被解析器誤判。必須使用分隔符號(中括號 [] 或雙引號 "")包裹。
string sql = "select * from [user] where grade > (select grade from [user] where id = @id)";
並搭配參數化查詢防止注入:
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@id", id);
// ...
}
user, order, group, key, index, desc, desc, select, insert, update, delete 等。[]。[Table("[user]")] 或 Fluent API 指定對應表名,避免手寫 SQL 出錯。養成「表名、欄名一律加中括號」的習慣,可徹底杜絕此類語法錯誤,提升 SQL 程式碼健壯度。