2010-06-02 6 views
1

Je veux vérifier que l'instruction select (string) est valide ou non dans C# .net, si select statement est correct puis récupère les données et remplit la liste déroulante sinon la liste déroulante devrait être videcheck L'instruction select est valide ou non dans C# .net

+0

Cette question n'a aucune signification. – SLaks

+0

Plus vous posez d'efforts sur votre question, plus la qualité et la quantité de réponses que vous obtiendrez seront grandes. Ce n'est pas clair pour le moins. –

+0

J'ai supprimé la plupart des tags car ils étaient incorrects ou dénués de sens. S'il vous plait, expliquez-vous plus et quelqu'un peut repasser la question comme il se doit. – slugster

Répondre

2

À quelle fréquence l'instruction select serait-elle invalide? On dirait qu'un simple bloc try/catch autour de l'exécution du SQL peut suffire.

En aparté, j'espère que vous ne faites pas une application qui permettrait à quelqu'un de taper dans SQL arbitraire dans une boîte qui vous puis exécutez ...

+0

Il peut y avoir une situation où il suffit d'exécuter le SQL et de gérer les erreurs n'est pas sûr - supposons que vous ne maîtrisez pas complètement le SQL qui est en cours d'exécution. Dans ce scénario, si le SQL est quelque chose de très mauvais (par exemple une instruction TRUNCATE TABLE), alors une erreur peut ne pas être levée mais elle aurait exécuté l'instruction malveillante. Par conséquent, je pense qu'il est plus sûr dans ce scénario de suivre les étapes décrites dans ma réponse. – AdaTheDev

+0

@AdaTheDev - Exactement, ce qui explique pourquoi j'ai eu mon commentaire sur le fait de permettre à quelqu'un de taper SQL arbitraire.Très dangereux. –

2

Une approche qui couvre la plupart des scénarios est d'exécuter le SQL avec SET FMTONLY ON

par exemple

SET FMTONLY ON; 
SELECT SomeField FROM ExampleQuery 

De BOL, SET FMTONLY:

Les retours ne métadonnées au client. Peut être utilisé pour tester le format de la réponse sans réellement exécuter la requête query .

Cela provoquera une erreur si la requête n'est pas valide. Vous pouvez également vérifier le résultat pour déterminer le schéma du jeu de résultats renvoyé (c'est-à-dire aucun schéma = pas une instruction SELECT).

Mise à jour: En termes généraux lorsqu'ils traitent avec SQL que vous voulez protéger contre l'injection SQL il y a d'autres choses que vous devriez penser à:

  1. Évitez sql dynamique (concaténer valeurs entrées par l'utilisateur dans une chaîne SQL à exécuter). Utilisez le SQL paramétré à la place.
  2. Encapsule la requête en tant que requête imbriquée. par exemple.

    SELECT * FROM (SELECT quelque chose ADynamicQueryThatsBeenGenerated) x

Donc, si la requête contient plusieurs commandes, cela se traduirait par une erreur. c'est-à-dire que cela aboutirait à une requête invalide lorsqu'elle est encapsulée comme une requête imbriquée:

SELECT SomethingFrom FROM MyTable;TRUNCATE TABLE MyTable 
+1

'SELECT SomethingFrom FROM MyTable); TABLE TRUNCATE MyTable; -' – SLaks