Apostrophe

bouahmedg Messages postés 38 Date d'inscription lundi 2 octobre 2006 Statut Membre Dernière intervention 2 novembre 2006 - 20 oct. 2006 à 13:06
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 - 20 oct. 2006 à 17:07
salut,
je veux enregistrer le contenu d'une zone texte dans la base , cette zone contient une apostrophe (exemple : aujourd'hui) ,or pour l'insertion j'utilise '"+nomClasee.attribut+"' et pour cette taison qu'un erreur se produit!
Comment l'empecher!

5 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
20 oct. 2006 à 13:21
Salut

Utilises une  requete paramétrée plutot qu'une concaténation pour la contruire. Deja ton probleme n'existera plus.
Et cela peut t'eviter quelques problemes de sécurité (injections sql).

Mx
MVP C# 
0
Moomoon07 Messages postés 223 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 5 mai 2014
20 oct. 2006 à 15:29
Salut !

Moi je voudrais bien un petit exemple de requête paramétrée, parce que beaucoup de monde en parle de ce pb de sécurité, mais je ne vois pas comment faire ...

(Traduit nous celle ci par exemple, et une petite "INSERT" ou "UPDATE")

public
DataRow getRowMagasin(
String NumMag)
{

OleDbConnection myConnection =
new
OleDbConnection(cString);

OleDbDataAdapter Adapter1 =
new
OleDbDataAdapter();
Adapter1.TableMappings.Add(
"Table",
"MAGASIN");
ConnecterBDD(myConnection);

OleDbCommand Command1;
Command1 =
new
OleDbCommand(
"SELECT * FROM MAGASIN WHERE NumMag='" +
NumMag +
"'");
Command1.Connection = myConnection;
Command1.CommandType =
CommandType.Text;
Adapter1.SelectCommand = Command1;

DataSet ds =
new
DataSet(
"MAGASIN");
Adapter1.Fill(ds);
myConnection.Close();

return ds.Tables[0].Rows[0];
}
MMN
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
20 oct. 2006 à 16:02
Salut,

Y'a rien de tres compliqué,  la documentation ne sera pas forcément plus explicite que mon exemple.

Enfin pour ton code (je prends que la partie "requete", cela donnerait

<hr />OleDbCommand cmd =
new
OleDbCommand(
"SELECT * FROM MAGASIN WHERE NumMag=@NumMag");

OleDbParameter paramNumMag =
new
OleDbParameter(
"@NumMag",
OleDbType.VarChar, tailleMaxDeTonNumMag);

paramNumMag.Value = NumMag;
cmd.Parameters.Add(paramNumMag);

<hr />
Tu peux aussi utiliser (.Net 2 seulement)
cmd.Parameters.AddWithValue(
"@NumMag", NumMag);

Mais tu ne peux alors pas spécifier le type et la taille de la valeur attendue.

Et qu'est ce que cela apporte ?

Plus besoin de jouer avec les apostrophes, lecture plus facile.
Risque d'injections SQL réduits.

Et en prime, ca n'a rien de plus compliqué que de construire sa chaine avec des concaténations (c'est meme plus facile a debugger)

Mx
MVP C# 
0
Moomoon07 Messages postés 223 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 5 mai 2014
20 oct. 2006 à 16:10
OK je comprends mieux.
Je ne connaissais pas l'existence de cette classe.
C'est vrai que c'est plus simple.
Merci

Pour ce que vous appelez l'injection SQL, c'est dans le cas ou un utilisateur saisirait dans une textbox une requete sql à la place d'une valeur (avec des ";" pour séparer les requêtes) ?

MMN
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
20 oct. 2006 à 17:07
0
Rejoignez-nous