Je stocke et je modifie un champ dans une base de données impliquant une longue chaîne d'une ou plusieurs phrases. chaque fois que j'entre un seul devis dans la zone de texte et que vous souhaitez le sauvegarder, il jette une exception comme
"Syntaxe incorrecte près de" L ".
Marque de citation non clothée après la chaîne de caractères ''. " Em>
Y a-t-il une idée d'éviter cela? EDIT: strong>
La requête est la suivante: p>
6 Réponses :
Écrivez un produit stocké pour effectuer votre modification de champ et utiliser des paramètres SQL pour enregistrer la valeur. Les citations n'auront pas d'importance. Si vous ne souhaitez pas que de la part stockée, créez au moins votre texte SQL avec des marqueurs de paramètres et utilisez des paramètres SQL avec cela. P>
Si vous souhaitez inclure une seule citation dans un champ SQL, évacuez-le à l'aide de guillemets simples ceci est pour SQL Server. P> P>
Il serait beaucoup plus sûr d'utiliser le SQL paramétré à la place.
Luke: Bien sûr, mais je ne vais pas rester assis ici et essayer de deviner comment il fait actuellement son SQL, alors je vais donc donner la réponse la plus simple.
@Thetxi: assez juste, mais cependant, il fait son SQL, la seule chose qui est certaine, c'est qu'il n'utilise pas de paramètres. L'utilisation de paramètres éviterait ce problème complètement.
Dans MSSQL, vous pouvez doubler vos devis:
my dodg'y test -> 'my dodg''y test' my 'quoted' string -> 'my ''quoted string''' 'first and last quotes' -> '''first and last quotes'''
mais le problème est que je reçois l'entrée de l'utilisateur de sorte que cela ne serait pas agréable de dire à l'utilisateur d'ajouter une autre citation
Il est difficile de vous donner une réponse spécifique, car vous n'écoutez pas la langue de la base de données ou de l'application que vous utilisez.
Vous devez construire votre SQL de manière dynamique et la citation de la piqûre est interprétée comme le fin de la chaîne. Selon la base de données que vous utilisez, vous devez échapper aux guillemets simples de chaque chaîne que vous souhaitez utiliser dans votre commande SQL. Ceci peut être vu en imprimant votre requête avant d'essayer de l'exécuter. P>
Vous ne mentionnez pas l'application que vous appelez la base de données à partir de, mais lorsque vous construisez votre commande, vous devez utiliser un correctif_quotes () Commande que vous écrivez ou si cela est fourni par votre langue: p> Ce type de requête dynamique est très facile pour un Attaque d'injection SQL . strong> Je vous recommanderais d'appeler la base de données avec une procédure stockée ou avec une liste de paramètres. P> P> P> P> P> P >
AS km dit, ne fais pas cela! strong> faire cette em> à la place: p>
Comme certains l'ont déjà dit, l'ajout d'une citation supplémentaire fera l'affaire. Je peux confirmer que c'est également le cas pour Oracle (d'autres ont donné à cette réponse valable pour SMSQL et SQL Server). Je pense que l'utilisation de procédures stockées est surchargée pour cela. P>
Que diriez-vous d'utiliser une requête paramétrée?
Oui, tu peux faire ça. La solution de double citation devra être utilisée si vous exécutez directement SQL, non via l'API .NET.
Veuillez afficher la déclaration SQL que vous utilisez.
Il suffit d'échapper à «avec un autre» comme I> Angels de l'enfer I> à Angels de l'enfer B>
Sqlcommand com = nouveau sqlcommand ("Mettre à jour la question de la question = '[" + tbquestion.text + "]' ', réponse =' [" + tbanswer.text + "] '', lèses = '" + actualUser.login + "" Où Id = '"+ couranteQuestion.id +"' ");
C'est ce que nous pensions tous. Veuillez éditer votre question pour ajouter ces informations.
Ne t'inquiète pas. Je le ferai pour toi.