SQL 注入哪个语句更好更安全?

Which statement is better and more secure for SQL Injection?

哪个语句可以更好更安全地防止任何 sql 注入,或者它们是否相同?

com.CommandText = "update tblTableName set Name=@name, Age=@age WHERE ID=1";
com.Parameters.AddWithValue("@name", name.ToString());
com.Parameters.AddWithValue("@age", age.ToString());

com.CommandText = @"update tblTableName set Name=" + name.ToString() + ", Age=" + age.ToString() + " WHERE ID=1";

com.CommandText = "update tblTableName set Name=" + HttpUtility.HtmlEncode(name.ToString()) + ", Age=" + age.ToString() + " WHERE ID=1";

或者有更好的方法吗? 感谢您的帮助和意见。

只有第一个可以防止 SQL Injection 次攻击。

您在第二个或第三个示例中没有使用任何 prepared statements and parameterized sql。我可以在您的 age 变量中发送 18; DROP TABLE tblTableName。使用 HttpUtility.HtmlEncode 方法创建 html 编码的字符串也无济于事。

也不要使用AddWithValue方法。有时 可能 会产生意想不到的结果。使用 .Add() 方法重载来明确指定您的列类型和大小。

阅读:Can we stop using AddWithValue() already?

首先,它可以防止 sql 注入。

http://www.c-sharpcorner.com/UploadFile/puranindia/parameterized-query-and-sql-injection-attacks/