j'ai remarqué ce qui suit:d'échappement en apostrophes Linq base procédure stockée appelle lorsque SP contient SQL dynamique
Un site Web ASP.NET MVC en cours de développement obtient une erreur SQL « guillemet Unclosed ... » quand il fait un LINQ appel à une procédure stockée contenant du SQL dynamique.
Par exemple:
SP GetEmployees appelé avec le paramètre [filter_name] qui a une valeur [N'for] jette cette erreur
je peux résoudre le problème en faisant une .replace ("'", " '' ") comme ceci:
[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));
}
Maintenant, je n'ai pas envie de passer par tous mes SP et de le faire manuellement. Y a-t-il un moyen d'en faire une règle générale qui devrait être appliquée à tous les appels Linq SP que j'ai maintenant et que je ferai dans le futur?
De plus, y a-t-il autre chose que je devrais échapper pour empêcher les attaques par injection SQL?
EDIT:
question Ajouté: Est-ce donner des problèmes avec les PC qui ne comprennent DonT sql dynamique? Je veux dire, quand j'ajoute ce nom dans la base de données, sera-t-il stocké comme [n''for]? Je viens de me rendre compte que ce sera probablement le cas et je devrais le faire manuellement de toute façon
Je ne peux pas m'éloigner du SQL dynamique tel qu'il est requis dans ce scénario (le SP utilise beaucoup de paramètres (facultatifs) et est assez complexe) et je ne fabrique pas les SP. Mais merci beaucoup pour vos conseils. –