在旁注中,当我这样做时,Visual Studio对我注意到sql注入的可能性,尽管这些查询被参数化了(更不用说资源文件中的“拼写”警告)。
如果您有高度的授权,那么存储过程不能被使用,也不能使用ORM,那么将复杂的sql作为资源存储并不是那么糟糕,因为你至少不需要转义字符在System.String中,你至少要保持眼睛有点安全。如果您的sql本质上是动态的,则将资源文件与文本模板机制相结合是相当干净的。
也就是说,除非在维护成本,可读性和能力方面有明显的好处,否则应避免使用资源文件的一般情况(即在大多数情况下似乎是这样)。将存储过程绑定到代码中有很多干净的方法;有一些合格的ORM工具和小数据访问层可以做得更好。