2010-11-08 9 views
4

J'ai besoin d'utiliser les caractères ' dans la requête d'accès.Comment écrire 'dans une requête SQL?

mais si j'écris sélectionnez Fname from MEN where Fnale = 'j'o' i get erreur

comment écrire les caractères '

remercient à l'avance

Répondre

9

Essayez une barre oblique inverse \' ou deux citations ''.

Cela dépend de votre base de données. MySQL utilise \' et Microsoft SQL et MS Access utilise deux guillemets ''.

+0

Cela parle probablement pour lui-même, mais juste pour élaborer: Vous avez besoin de \ donc le caractère suivant sera interprété comme caractère en texte brut. – Nick

5

Les guillemets simples peuvent être échappés avec deux guillemets simples.

SELECT Fname FROM MEN WHERE Fnale = 'j''o' 
2

J'utiliser une chaîne littérale pour éviter tout échapper

string query = @"select Fname from MEN where Fnale = 'jo'"; 

Si vous échappez ce par rapport à SQL, utilisez une autre citation unique pour échapper aux citations:

select Fname from MEN where Fnale = ''jo'' 
1

Essayez de remplacer 'avec' '

2

Comme d'autres l'ont dit, vous pouvez échapper les guillemets. Mais si vous envoyez cette requête à partir de C#, alors il est préférable d'utiliser parameters - de cette façon, tout échappement est fait pour vous, donc vous ne pouvez pas oublier un cas spécial où l'entrée de l'utilisateur peut encore causer des effets indésirables. (little bobby tables, tout le monde :-)?)

3

Pour SQL Server:

var cmd = new SqlCommand("select fname from MEN where fnale = @query", myConnection); 
cmd.Parameters.AddWithValue("@query", "j'o"); 

Toutes les solutions où vous ajoutez votre paramètre à la chaîne sql vous avez tort (ou au moins un risque élevé), parce qu'ils sont vulnables pour une attaque par injection SQL.

Vous mentionnez « requête d'accès », pour Microsoft Access/Ole utilisez la syntaxe suivante:

var cmd = new OleDbCommand("select fname from MEN where fnale = ?", myConnection); 
cmd.Parameters.AddWithValue("?", "j'o"); // Order does matter 
+0

Avez-vous réfléchi sérieusement à quel type de risque réel d'injection SQL existe-t-il avec un backend Jet/ACE? C'est beaucoup moins qu'avec la plupart des bases de données. Je ne conteste pas le conseil en général, en soulignant simplement que l'alarmisme sur l'injection de SQL est la plupart du temps mal placé pour votre application d'accès standard. Voir http://stackoverflow.com/questions/512174/non-web-sql-injection/522382#522382 pour mon point de vue sur le sujet. –

+0

@David: Je n'ai que des connaissances limitées. Un hacker peut connaître un moyen de faire une injection SQL. J'ai quelques outils pour le rendre plus difficile, et j'ai l'intention de les utiliser. – GvS

+0

Cela dépend de ce que vous entendez par "injection SQL". La plupart des gens veulent dire quelque chose de beaucoup plus drastique que ce qui est possible avec Access/Jet/ACE. –

Questions connexes