2017-02-05 1 views
1

J'ai une page Web, l'utilisateur peut sélectionner la colonne et filtrer la colonne et quand ils cliquent sur le bouton de recherche, il doit appeler la procédure stockée en passant la clause complète where.Comment passer la clause where à une procédure stockée SQL Server?

Je pense que c'est une si mauvaise idée de passer la clause where sur la procédure stockée, car cela peut provoquer une injection SQL.

C'est ma page

Filter Page

est-il un autre moyen à mes critères? Je devrais passer la valeur avec l'opérateur. Parce que l'utilisateur peut choisir différent opérateur de comparaison dans une situation différente

Répondre

0

Ce serait en effet une très mauvaise pratique de passer une telle clause where. Il y a peu d'options:

  1. Utiliser Entity Framework pour construire des requêtes premières
  2. Utilisation table-valued parameters aux procédures stockées
    • Il pourrait contenir trois colonnes: Condition, Column, Value
    • Alors vous construisez ce vable variable dans votre code et l'envoyer à la procédure stockée SQL Server où basé sur ces valeurs, vous pouvez créer votre requête dynamiquement.
  3. Il doit y avoir d'autres solutions, mais ce sont les premières qui me viennent à l'esprit.
+0

Puis-je créer comme ceci CREATE PROCEDURE [dbo]. [MyProc] @whereSql nvarchar (256) AS EXEC ('SELECT [champs] DE [tableau] WHERE' + @whereSql) GO ' –

+0

@Abbas Ne recommande pas. –

+0

N'utilisez pas EntiryFramework. – Phill