Я заметил следующее:
Веб-сайт ASP.NET MVC, находящийся в стадии разработки, получает ошибку SQL «Незакрытая кавычка ...» при вызове LINQ хранимой процедуры, содержащей динамический SQL.
Например:
SP GetEmployees, вызванный с параметром [имя_фильтра] со значением [n'for], выдает эту ошибку
Я могу решить проблему, выполнив .replace ("'", "' '") следующим образом:
[Function(Name = "dbo.GetEmployees")]
public ISingleResult<EmployeeRow> GetEmployees(
[Parameter(DbType = "NVarChar(MAX)")] string filter_name)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), filter_name.Replace("'", "''"));
return ((ISingleResult<EmployeeRow>)(result.ReturnValue));
}
Теперь мне не хочется проходить через все свои SP и делать это вручную.
Есть ли способ сделать это общим правилом, которое должно применяться ко всем вызовам Linq SP, которые я имею сейчас и буду делать в будущем?
Кроме того, есть ли что-то еще, что я должен избегать, чтобы предотвратить атаки SQL-инъекций?
EDIT:
Добавлен вопрос: не вызовет ли это проблем с SP, которые не включают динамический sql?
Я имею в виду, когда я добавлю это имя в базу данных, оно будет сохранено как [n''for]?
Я только что понял, что это, вероятно, будет так, и тогда мне все равно придется делать вручную