0

我想知道在从 ExecuteStoredProcedure 执行 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);
4

1 回答 1

0

基本上可以归结为这一点。您是否正在重用查询,有很多调用但 typeID 的值不同?那么是的,它可能会对性能产生微小的影响。

另一方面,如果您只进行一次调用,那么大部分性能损失将是您的数据库调用。

就我个人而言,我还没有看到这对我在过去 8 到 10 年编写的任何代码产生了明显的影响。

所以我投票 - 不要打扰。

于 2012-05-25T14:24:44.233 回答