如果您在不使用参数的情况下即时生成 SQL 字符串,您可能会遇到内存问题。
你可以这样做:
cmd.CommandText = "SELECT email, passwd, login_id, full_name " +
"FROM members " +
"WHERE email = '" + email + "'";
或者你可以这样做:
string s = "SELECT email, passwd, login_id, full_name " +
"FROM members WHERE " +
"email = @email";
SqlCommand cmd = new SqlCommand(s);
cmd.Parameters.Add("@email", email);
后者是参数化的。它将被缓存一次。前者没有参数化。每次您使用不同的值编写类似的查询时,它都会被缓存email
。这会爆炸你的记忆。
后者要优越得多。它避免了注入攻击。dapper 可以缓存一次。SQL Server 将编译一次执行计划并缓存它。
您应该(必须)已经在使用参数化查询。如果你不是,放弃你正在做的一切,把它作为当务之急。
有人可以提供一个会产生此内存问题的 c# 代码示例。谢谢你
只需循环执行前者。看着你的记忆增长。循环执行后者。注意你的记忆不要增长。