Как убрать экранирование апострофа в c#?
Беру с сервера имена всех таблиц. После чего пытаюсь получить доступ к таблице по одному из полученному имени.
MySqlCommand command = new MySqlCommand("SELECT * FROM @table", db.getConnection());
command.Parameters.Add("@table", MySqlDbType.String).Value = '`' + nameTable + '`';
Но выходит ошибка:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''`физические лица - клиенты`'' at line 1
Я понял, что мои апострофы экранируются. Как мне убрать это экранирование? При этом данное экранирование происходит только при передачи sql запроса на сервер. В программе если вывести данную строку в label, то она будет нормальной. Я пробовал бороться не писать на прямую апостроф, а ставить /x027 - не помогло. Я пробовал делать экранирование апострофа /` - но такой escape-последовательности не существует. Одинарная кавычка для sql не подходит. Он не воспринимает ее. Также если передать sql запрос на прямую с именем таблицы, то все работает исправно.
"SELECT * FROM `физические лица - клиенты`
Но мне необходимо динамически получать имена таблиц и отображать их содержимое.
Такая ошибка и с @ и без него. С экранированием и без него. С одинарными кавычками @ не работает. Без него появляется слэш
Ответы (1 шт):
Я недавно решил подобную проблему так, правда, в SQLite, но я думаю и тут подойдет: Нужно добавить параметр отдельно, а не собиранием строки/экранированием. т.е cmd.Parameters.AddWithValue("@newValue", newValue);
using (SQLiteConnection Connect = new SQLiteConnection(@"Data Source =" + Application.StartupPath + @"\GridProjectDB.db; version = 3"))
{
Connect.Open();
SQLiteCommand cmd = new SQLiteCommand
{
Connection = Connect,
CommandText = $@"UPDATE GridProjectTable
SET {col} = (@newValue)
WHERE GUID = '{thisRowObject.GUID}'"
};
cmd.Parameters.AddWithValue("@newValue", newValue);
cmd.Prepare();
cmd.ExecuteNonQuery();
Connect.Close();
}
