Apostrophe

Signaler
Messages postés
38
Date d'inscription
lundi 2 octobre 2006
Statut
Membre
Dernière intervention
2 novembre 2006
-
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
-
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

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
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# 
Messages postés
223
Date d'inscription
mercredi 31 mai 2006
Statut
Membre
Dernière intervention
5 mai 2014

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
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47
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# 
Messages postés
223
Date d'inscription
mercredi 31 mai 2006
Statut
Membre
Dernière intervention
5 mai 2014

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
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
47