MySQL C # Запрос с использованием формата строки MySql.Data.MySqlClient :: MySqlCommand - PullRequest
0 голосов
/ 31 января 2019

Проблемы с форматированием SQL, которые, по моему мнению, связаны с неправильной структурой моего sql-запроса, в частности с кавычками.

        string recordedPassword = SQLReader.RunQuery (
            "SELECT " +
            "Password " +
            "FROM " +
            "players " +
            "WHERE " +
            "Username="+
            "\""+
            username +
            "\""+
            "Password=" +
            "\""+
            password +
            "\"");

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

Я читал несколько пользователей онлайн, которые говорят, что запросы MySQL должныиспользуйте одинарные кавычки для определения значений, но при тестировании запросов в PhpMyAdmit значения принимаются только в двойных кавычках.

Double

enter image description here

Single

enter image description here

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 31 января 2019

Здесь есть несколько вещей, к которым можно обратиться / просмотреть

Вы можете сделать многострочные строки более читабельными в C #, добавив к ним префикс @:

string sql = @"SELECT *
  FROM table
  WHERE field = value";

Это останавливает "новую строку в константе""ошибка, а также выполнение нескольких других вещей, не требующих \ обратной косой черты.Так как теперь в перемешивании разрешено содержать символы новой строки, вам не нужно останавливаться и начинать его с "+" "+" "все время, так что это не выглядит грязно.Он отключает такие вещи, как возможность использовать \ n для новой строки, потому что \ просто обрабатывается как обычный символ.Таким образом, он делает пути к Windows более чистыми для ввода (@ "C: \ temp" против "C: \ temp". SQL не заботится о пробелах, поэтому делайте отступы в C #, однако вам нравится

Тем не менее, вы 'Лучше было бы поместить строки SQL в файл ресурсов / настроек или даже использовать всю библиотеку ресурсов и использовать библиотеку доступа к данным, такую ​​как структура сущностей, так что вы вообще не пишете SQL в строках

Всегда параметризуйтеваши заявления. Если вы не собираетесь использовать EF или аналогичный (который будет параметризироваться для вас), вам, безусловно, следует по крайней мере использовать:

string sql = @"SELECT * FROM players WHERE username = @u and password = @p";

Позже, установите значения параметров в SqlCommand (илив любом случае), так что @u имеет значение «Anthony», а @p - «пароль Энтони». Никогда, никогда не создавайте строки SQL, объединяя их вместе, как вы сделали здесь - это не только риск ошибки, как только кто-то используетАпостроф, это угроза безопасности. См. http://bobby -tables.com для получения дополнительной информации

Большинство поставщиков баз данных используют апостроф 'для начала и окончания строки, а не двойные кавычки ".MySQL может быть исключением, но старайтесь следовать соглашению, а не изучать собственные синтаксисы SQL.SQL не похож на javascript, где «и» означают «строка», а вы «используете тот, который позволяет иметь значения, содержащие другое», например "Antony's password" или 'she said "yes" already'

В SQLесли вы хотите поместить апостроф в строку, вы обычно удваиваете его: WHERE password = 'Anthony''s password', но если вы используете параметры (всегда используйте параметры), вам не нужно делать это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...