1
votes

Comment insérer '' (2 apostrophes) dans SQL

J'ai besoin d'insérer '' (2 apostrophes) dans une colonne. Juste les apostrophes sans aucun texte. Mais je finis par insérer \ '\' (apostrophes avec des barres obliques inverses)

        NpgsqlCommand Cmd = new NpgsqlCommand("INSERT into Table(Col) VALUES(@value), conn);
        Cmd.Parameters.AddWithValue("@value", "''");
        Cmd.ExecuteNonQuery();

Résultat: \ '\' apparaît dans mon tableau.

Si j'utilise moins ou plus d'apostrophes il s'insère bien mais j'ai besoin d'exactement 2 et pour une raison quelconque, des contre-obliques apparaissent.


5 commentaires

«Résultat: \ '\' apparaît dans ma table» où? Dans le débogueur? Dans la console de gestion SQL? Suite à une requête que vous ne nous montrez pas?


J'utilise juste PgAdmin pour vérifier visuellement le contenu du tableau.


Pouvez-vous corriger votre code à compiler? Je ne vois pas comment ce nouveau peut fonctionner en c # ...


Il vous manque également une parenthèse fermante dans votre instruction INSERT


Je soupçonne fortement que c'est juste PgAdmin qui échappe aux choses quand il affiche la valeur. Essayez de sélectionner la longueur de la valeur et je suppose que vous verrez que c'est 2, pas 4.


3 Réponses :


-1
votes

Essayez de doubler chaque apostrophe.

Cmd.Parameters.AddWithValue ("valeur", "'' ''");


1 commentaires

Ensuite, il les insère tous les 4 normalement.



-1
votes

L'ajout d'une zone de texte vide et l'utilisation de sa valeur de texte me permettent d'insérer les doubles apostrophes.

La réponse serait donc

NpgsqlCommand cmd = new NpgsqlCommand (INSERT into Table (Col) VALUES (@value);
Cmd.Parameters.AddWithValue("@value", textBox1.text);
Cmd.ExecuteNonQuery();

Où texBox1 est juste un vide zone de texte.

Ce n'est probablement pas la meilleure façon de procéder, mais cela fonctionne pour le moment.


2 commentaires

La valeur de texte d'une zone de texte vide sera simplement une chaîne vide. Essayez-vous d'insérer littéralement '' dans une colonne ou la chaîne vide dans une colonne? Parce que si vous voulez une chaîne vide, utilisez simplement "" ou String.Empty .


Ceci insère une chaîne vide. Je soupçonne très fortement que le problème réside dans la façon dont vous interprétez ce que vous voyez, pas dans les données elles-mêmes.



2
votes

Il semble y avoir beaucoup de confusion dans les résultats ci-dessus.

Npgsql n'effectue aucun échappement dans les paramètres, car ils sont envoyés hors bande et ne sont pas traités en SQL. Si la valeur de votre paramètre contient une chaîne C # avec deux apostrophes, c'est ce qui sera inséré dans la base de données.

Après avoir exécuté votre code ci-dessus et utilisé psql, j'obtiens ce qui suit:

INSERT INTO foo (name) VALUES ('''''');
npgsql_tests=# select * from foo;
 name 
------
 ''
(1 row)

Peut-être que pgadmin affiche des valeurs avec des barres obliques inverses - je ne sais pas - mais ce serait un problème d'affichage.

Enfin, si vous voulez vraiment pour insérer une valeur constante (par opposition à une valeur fournie par l'utilisateur), il n'y a aucune raison d'utiliser des paramètres. Intégrez simplement votre valeur dans SQL:

var cmd = new NpgsqlCommand("INSERT into foo (name) VALUES (@value)", conn);
cmd.Parameters.AddWithValue("@value", "''");
cmd.ExecuteNonQuery();

Il y a six apostrophes là-dedans: 2 comme délimiteurs de chaîne, et deux autres apostrophes échappées (en SQL, '' est la forme échappée d'une seule apostrophe littérale).

Cependant, si vous lisez l'entrée de l'utilisateur, utilisez certainement un paramètre.


0 commentaires