我正在用C#方法编写一个select查询,它允许客户端代码提供行ID并返回从行数据构造的对象.如果行ID是一个整数并且我已经确认它是正数,那么通过使用string.Format传递它是否有任何危害?如果只允许传入int而不是字符串,我看不出有什么损坏可以做.
dri*_*iis 12
你是对的,以这种方式传递整数是安全的.然而,故事的另一面也是如此.
虽然可以认为只是格式化一个int来创建SQL表达式是安全的,但也有一个性能考虑因素.当SQL Server第一次看到查询时,它将创建并缓存该查询的执行计划.下次发出相同的查询时,将重用执行计划.
如果传入不同的字符串,它将被视为单独的查询,需要单独的执行计划.如果每次传入相同的参数化查询(具有不同的参数),SQL Server将重用第一个执行计划.
即使您不关心性能优势,我仍然会对所有针对数据库的查询使用参数化查询,即使对于那些可以被视为"安全"的查询 - 只需要与应用程序的方式保持一致访问数据.如果您始终使用参数化查询,则还可以省去每次确定查询是否安全的麻烦,以便决定查询数据库的方式.
| 归档时间: |
|
| 查看次数: |
298 次 |
| 最近记录: |