Comment enregistrer du texte avec des guillemets de la zone de texte pour accéder à la base de données

la programmation


Salut tout le monde,
Je développe une application qui permet à l’utilisateur de remplir un formulaire avec du texte.
C’est pourquoi j’utilise des zones de texte.
Je peux enregistrer les données contenues dans les zones de texte dans une base de données Access mais il y a un problème lorsque le texte contient des guillemets simples (‘) ou doubles (“).

Comment puis-je résoudre le problème ?

Merci

Précision : il s’agit d’une application bureautique WinForm en C#

Ce que j’ai essayé :

l’utilisation de Texbox1.Text ne fonctionne pas puisque les guillemets apparaissent dans la commande SQL et sont interprétés comme faisant partie de la commande et non comme des données

voici le code

C#
OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Historique_Rdv.accdb");
connection.Open();

string command = "INSERT INTO RendezVous " +
    "(IDAnimal, NumeroRdv, DateRdv, Prestation, Temps, ComplementInfo, Paye, IDProprietaire)  " +
    "VALUES(" + int.Parse(TB_idAnimalNewRdv.Text) + ", " + int.Parse(TB_numeroRdvNouveauRdv.Text) + ", '" + TB_dateNouveauRdv.Text + "', '" + TB_actionNouveauRdv.Text + "', '" + TB_tempsNouveauRdv.Text + "', '" + TB_complementInfoNouveauRdv.Text + "', " + int.Parse(TB_payeNouveauRdv.Text) + ", " + int.Parse(TB_idProprietaireNewRdv.Text) + " )";

OleDbCommand cmdd = new OleDbCommand(command, connection);
cmdd.ExecuteNonQuery();

connection.Close();

Solution 2

Citation:

Je peux enregistrer les données contenues dans les zones de texte dans une base de données Access mais il y a un problème lorsque le texte contient des guillemets simples (‘) ou doubles (“).

Ceci est probablement lié à la manière dont vous essayez de sauvegarder le texte.
Vous devriez en savoir plus sur la vulnérabilité d’injection SQL.

Ne créez jamais de requête SQL en concaténant des chaînes. Tôt ou tard, vous le ferez avec les entrées de l’utilisateur, ce qui ouvre la porte à une vulnérabilité nommée “injection SQL”, elle est dangereuse pour votre base de données et sujette aux erreurs.
Une simple citation dans un nom et votre programme plante. Si un utilisateur saisissant un nom tel que “Brian O’Conner” peut planter votre application, il s’agit d’une vulnérabilité d’injection SQL, et le crash est le moindre des problèmes, une entrée utilisateur malveillante et elle est promue en commandes SQL avec toutes les informations d’identification.
Injection SQL — Wikipédia[^]
Injection SQL[^]
Attaques par injection SQL par exemple[^]
PHP : Injection SQL – Manuel[^]
Comment puis-je expliquer l’injection SQL sans jargon technique ? – Échange de pile de sécurité de l’information[^]

Solution 3

La raison pour laquelle votre code actuel ne fonctionne pas est que vous utilisez la concaténation de chaînes pour créer la requête SQL INSERT. NE JAMAIS FAIRE CELA !!!

Utilisez plutôt des requêtes paramétrées. De cette façon, les guillemets doubles dans votre texte sont correctement échappés au lieu d’être interprétés comme faisant partie de votre instruction SQL.

Une fois que vous avez fini de lire les liens de la solution 2, recherchez sur Google « Requêtes paramétrées C# SQL » pour trouver des informations sur la façon de créer des objets de paramètres pour vos questions et placez les espaces réservés de paramètres dans votre instruction SQL.

Oh, et vous faciliterez grandement le débogage de votre code SQL en faisant cela également.

コメント

タイトルとURLをコピーしました