Как вставить '' (2 апострофы) в SQL - PullRequest
1 голос
/ 03 июля 2019

Мне нужно вставить '' (2 апострофа) в столбец.Просто апострофы без всякого текста.Но я заканчиваю тем, что вставляю \ '\' (апострофы с обратными слешами)

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

Результат: \ '\' Появляется в моей таблице.

Если я использую меньше или больше апострофов, он вставляет нормальноно мне нужно ровно 2, а потом по какой-то причине появляются обратные слеши.

Ответы [ 5 ]

0 голосов
/ 04 июля 2019

В приведенных выше результатах, похоже, много путаницы.

Npgsql не выполняет экранирование параметров, поскольку они отправляются вне диапазона и не обрабатываются в SQL. Если значение вашего параметра содержит строку C # с двумя апострофами, это то, что будет вставлено в базу данных.

После запуска кода выше и использования psql я получаю следующее:

var cmd = new NpgsqlCommand("INSERT into foo (name) VALUES (@value)", conn);
cmd.Parameters.AddWithValue("@value", "''");
cmd.ExecuteNonQuery();
npgsql_tests=# select * from foo;
 name 
------
 ''
(1 row)

Возможно, pgadmin показывает значения с обратной косой чертой - я не знаю - но это будет проблемой с отображением.

Наконец, если вы действительно хотите вставить постоянное значение (в отличие от предоставленного пользователем), нет никаких причин использовать параметры. Просто вставьте ваше значение в SQL:

INSERT INTO foo (name) VALUES ('''''');

Там есть шесть апострофов: 2 в качестве разделителей строк и еще два экранированных апострофа (в SQL '' - экранированная форма единственного буквального апострофа).

Однако, если вы читаете ввод от пользователя, обязательно используйте параметр.

0 голосов
/ 04 июля 2019

У меня нет среды, чтобы попробовать это, но почему бы и нет

NpgsqlCommand cmd = new NpgsqlCommand (INSERT into Table (Col) VALUES (@value);
Cmd.Parameters.AddWithValue("value", "''" + "''");
Cmd.ExecuteNonQuery();
0 голосов
/ 03 июля 2019

Попробуйте удвоить каждый апостроф.

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

0 голосов
/ 03 июля 2019

Добавив пустое текстовое поле и используя его текстовое значение, давайте вставим двойные апострофы.

Таким образом, ответ будет

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

Где texBox1 - просто пустое текстовое поле.

Возможно, это не лучший способ сделать это, но пока это работает.

0 голосов
/ 03 июля 2019

Как насчет использования стенографического идентификатора?

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

Извините, при ближайшем рассмотрении я думаю, что это может быть ваш ответ:

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

Чтобы вставить апостроф в SQL, необходимо сделать его двойными одинарными кавычками, в противном случае SQL станет строковым индикатором. В этом случае попробуйте вставить два набора одинарных кавычек.

...