谁能告诉我为什么下面的代码在字符串前后添加了 2 个单引号('' string '')?
List<string> rolls
StringBuilder sb = new StringBuilder();
foreach (var roll in rolls)
sb.Append("'" + roll + "',");
string rollList = sb.ToString().TrimEnd(',');
string sql =
@"SELECT enrolment_status, roll_number FROM dt_modular_enrolment WHERE id_student = ?
AND roll_number in " + "( " + rollList + " )";
creates the below:
in ( ''ROLL4'',''ROLL6'',''ROLL5'',''ROLL1'',''ROLL2'',''ROLL3'' )
谢谢!
只是为了更新 - 代码没有任何问题(除了 sql 注入(inject)的可能性)它是一个添加额外引号的 sql 分析器错误。
最佳答案
从 SQL 注入(inject)的角度来看,这实际上是非常危险的。不幸的是,IN
查询很难正确地参数化,因为 TSQL 缺少“拆分”功能。但是,有很多工具可以帮助您做到这一点。例如,对于大多数 LINQ 提供程序,它只是:
List<string> rolls = ...
int studentId = ...
var query = from row in ctx.ModularEnrolment
where row.StudentId = studentId
and rolls.Contains(row.roll_number)
select new { row.EnrolmentStatus, row.RollNumber };
或使用类似 dapper 的工具(当不使用括号时,它对 in @someParameter
有特殊处理):
List<string> rolls = ...
int studentId = ...
var rows = connection.Query(@"
SELECT enrolment_status, roll_number FROM dt_modular_enrolment
WHERE id_student = @studentId and roll_number in @rolls",
new { rolls, studentId });
关于c# - StringBuilder.Append 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17669883/