Fork me on Github

参数化Sql语句(动态SQL)

string sql = "SELECT * FROM Products WHERE Name LIKE @tablebody";
var param = new SugarParameter("@tablebody", "%" + userInput + "%");
var list = await db.Ado.SqlQueryAsync<Product>(sql, param);
  1. SQL 语句(含占位符 @tablebody) 和 参数的值(% + userInput + %) 被分开发送给数据库。

  2. 数据库接收到后,先编译/解析 SQL 语句(此时 @tablebody 只是一个占位符,不包含任何用户数据)。

  3. 编译完成后,数据库将参数的值绑定到占位符上,然后执行。

param是在编译之后才被注入到值中,无论如何都不会被解释成 SQL 指令。参数化严格区分了 SQL 代码和用户数据,无论用户输入什么特殊字符(单引号、分号、注释符等),都会被当作普通字符串的一部分。
posted @ 2026-05-06 14:24  昂昂呀  阅读(16)  评论(0)    收藏  举报