让我先说我有偏见;在任何情况下我都讨厌动态SQL。这就是说,这种情况被认为是动态SQL的良好做法吗?在这种情况下使用动态SQL可以吗?
sqlDataSourceObject.SelectCommand = String.Concat(
"select top ", maxRows,
" col1, ",
" col2 as myData, ",
" '' as blah, ",
" col3 as Fromperson ",
" 'Corporate' as toPerson, ",
" Convert(char(11), orderDate) as orderDate, ",
" carrier, ",
sqlString1,
sqlString2,
sqlString3 + " AND areaCode = '" + currArea + "'"
);
这种查询可以运行一次,然后改变其值sqlString1,2,3, or currArea
并针对不同的SqlDataSource再次运行。
此代码让我生气读。它很难阅读,它可以随着sqlString变量改变,我无法运行它没有复制/粘贴到SSMS,我必须追踪几个变量进行单一更改。
但是,就像我说的我有偏见,所以我问你。这个代码是在LINQ之前于2001年编写的,与存储过程或其他技术一样好,从良好的实践角度来看,通常可以吗?
如果不是,你会如何改进它(记住没有LINQ,这是2001年)。
看起来像StackOverflow的可能是这个问题比较好。它看起来像你正在解决一些非常糟糕的数据库设计决策。 –
它充满了SQL注入攻击的一件事 –
@Jarrod Roberson-感谢您的纠正。我认为“编译SQL”只是用代码编译的sql。显然情况并非如此。 –