Есть ли лучший способ увидеть операторы MySql с параметрами в C # с помощью отладчика Visual Studios? - PullRequest
0 голосов
/ 10 октября 2018

Недавно я изменил некоторые программы на C #, чтобы добавить правильную параметризацию в некоторые операторы MySQL, которые изначально были написаны с помощью сцепленных строк.Неизменно, я сталкивался с некоторыми проблемами с моими утверждениями, и я не могу найти способ непосредственно увидеть полный оператор MySQL с примененными параметрами, отличными от этого временного решения, которое у меня есть, где я передаю команду MySQL этому:

private string getMySqlStatement(MySqlCommand cmd)
{
    string result = cmd.CommandText.ToString();
    foreach (MySqlParameter p in cmd.Parameters)
    {
        string addQuote = (p.Value is string) ? "'" : "";
        result = result.Replace(p.ParameterName.ToString(), addQuote + p.Value.ToString() + addQuote);
    }
    return result;
}

Это работает, но мне было интересно, есть ли более правильный способ увидеть полный оператор с примененными параметрами.Читая об этом, похоже, что параметры на самом деле не применяются, пока не достигнет сервера - это правильно?В этом случае, я полагаю, я могу придерживаться своей функции выше, но я просто хотел узнать, есть ли лучший способ сделать это.

Примечание: я просто использую эту функцию для целей отладки, чтобы я могсм. оператор MySQL.

1 Ответ

0 голосов
/ 10 октября 2018

MySQL поддерживает два протокола для связи клиент-сервер: текстовый и двоичный.В текстовом протоколе нет поддержки командных параметров в самом протоколе;они моделируются клиентской библиотекой.При использовании Connector / NET текстовый протокол используется всегда, если только вы не задали IgnorePrepare=true в строке подключения и не вызывали MySqlCommand.Prepare() для каждой команды.Так что, скорее всего, вы используете текстовый протокол.Это хорошо, потому что будет проще регистрировать фактические операторы с примененными параметрами.

Существует три способа просмотра выполняемых операторов:

Использование ведения журнала соединителя / NET

Добавьте Logging=true в строку подключения и создайте TraceListener, который прослушивает событие QueryOpened.Он должен содержать полный оператор SQL с интерполированными параметрами.Инструкции по настройке находятся здесь .

Использовать ведение журнала MySQL Server

Включить на своем сервере общий журнал запросов , чтобы увидеть все запросы, которыевыполняется.Это делается с помощью --general_log=1 --general_log_file=/var/path/to/file параметров сервера.

Packet Sniffing

Если вы не используете SslMode=Required (для шифрования соединения между клиентом и сервером), то вы можете использовать WireSharkзахватить сетевой трафик между вашим клиентом и сервером.WireShark имеет анализаторы протокола MySQL, которые будут проверять трафик MySQL и идентифицировать пакеты команд (которые содержат запросы SQL).Этот вариант идеален, если вы не можете ни изменить клиентскую программу, ни изменить параметры ведения журнала сервера.

...