我想知道在从ExecuteStorageProcedure执行sql时是否需要使用参数化查询以防止SQL注入攻击?
根据这个MSDN链接,我应该使用参数。
根据此其他 MSDN 链接,使用 {0} 的 sql 字符串等效于使用参数。
那么在我的 SQL 语句中只有一个{0}、{1}等真的可以吗:
var rv = _context.ExecuteStoreQuery<int>("select ID from table where typeID = {0}", typeID);
或者我需要:
var param = new SqlParameter("@typeID", SqlDbType.Int);
param.Value = typeID;
var rv = _context.ExecuteStoreQuery<int>("select ID from table where typeID = @typeID", param);
基本上可以归结为这一点。您是否重复使用查询,具有许多调用但具有不同类型ID的值?那么是的,它可能会对性能产生微小的影响。
另一方面,如果您只进行这一次调用,则大部分性能影响将是您的数据库调用。
就我个人而言,我还没有看到这在过去 8-10 年里对我编写的任何代码产生切实的影响。
所以我投票 - 不要打扰。