我是一个ASP.NET和C#编程的新手。
我想知道在SQL语句中使用参数而不是串联的区别和优点加缺点是什么,因为我听说这是防止SQL注入的更好方法(?)
下面是我从使用串联改为使用参数的示例SQL语句:
串联:
string sql = string.Format(
"INSERT INTO [UserData] (Username, Password, ...) VALUES ('" +
usernameTB.Text + "', '" + pwTB.Text + "',...);
字符串
主要参数:
cmd.CommandText =
"INSERT INTO [UserData] (Username, Password, ...) VALUES (@Username, @Password, ...)";
cmd.Parameters.AddWithValue("Username", usernameTB.Text);
cmd.Parameters.AddWithValue("Password", pwTB.Text);
型
提前感谢您提供的任何知识。
3条答案
按热度按时间wn9m85ua1#
7vux5j2d2#
优势
SQL注入避免是主要的一个。它确保了用户提供的数据和可执行代码的完全分离。
这也意味着,当人们无意中搜索像
O'Brien
这样的短语时,您的应用程序将正常工作,而无需手动转义所有这些搜索词。例如,使用
datetime
参数可以避免字符串表示中日期格式不明确的问题。如果是SQL Server,这意味着更好地使用计划缓存,而不是编译和存储大量类似的临时查询,它只需要重用一个。
缺点
无一项:
由于不适当地重复使用计划,您可能偶尔会遇到参数嗅探问题,但这并不意味着您不应在此事件中使用参数化查询。在SQL Server中,通常会添加
RECOMPILE
或OPTIMIZE FOR
查询提示以避免此问题。fdbelqdn3#
一个很好的理由是要防止SQL注入。
假设
usernameTB.Text
等于:字符串
如果您使用参数,这个字串会被正确逸出(例如,'会被'取代),因此它会成为字段的值。