@vaiman2

Как исправить «Input string was not in a correct format.»?

private void startSearch_Click(object sender, EventArgs e)
{
    try
    {
        DB db = new DB();

        DataTable table = new DataTable();

        MySqlDataAdapter adapter = new MySqlDataAdapter();

        MySqlCommand command = new MySqlCommand("SELECT * FROM `users` WHERE `ID` = @IDUser OR `login` LIKE @loginSearch", db.getConnection());
        command.Parameters.AddWithValue("IDUser", int.TryParse(txtSearch.Text, out int IDuser));
        command.Parameters.AddWithValue("loginSearch", string.Format("%{}%", txtSearch.Text));
        adapter.SelectCommand = command;
        adapter.Fill(table);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Такого пользователя нет!", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

private void txtSearch_KeyPress(object sender, KeyPressEventArgs e)
{
    if(e.KeyChar==(char)13)
    {
        startSearch.PerformClick();
    }
}


текст ошибки
System.FormatException: Input string was not in a correct format. Failure to parse near offset 2. Expected an ASCII digit.
at System.Text.ValueStringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ReadOnlySpan`1 args)
at System.String.FormatHelper(IFormatProvider provider, String format, ReadOnlySpan`1 args)
at System.String.Format(String format, Object arg0)
at KR_Michalev.AdminPanel.startSearch_Click(Object sender, EventArgs e) in C:\Users\wekol\Documents\GitHub\Register-Autorization-ClearMainMenu\AdminPanel.cs:line 44
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.PerformClick()
at KR_Michalev.AdminPanel.txtSearch_KeyPress(Object sender, KeyPressEventArgs e) in C:\Users\wekol\Documents\GitHub\Register-Autorization-ClearMainMenu\AdminPanel.cs:line 53
at System.Windows.Forms.Control.ProcessKeyEventArgs(Message& m)
at System.Windows.Forms.Control.WmKeyChar(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.TextBoxBase.WndProc(Message& m)
at System.Windows.Forms.TextBox.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(HWND hWnd, MessageId msg, WPARAM wparam, LPARAM lparam)
  • Вопрос задан
  • 184 просмотра
Пригласить эксперта
Ответы на вопрос 3
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
1) Стоит добавить тег C#, проблема явно не в бд, а в формировании запроса.
2) Неплохо бы проверить что возвращает string.Format("%{}%", txtSearch.Text), думаю лажа именно там.
Ответ написан
@mvv-rus
Настоящий админ AD и ненастоящий программист
Полагаю, вы хотели подставить между знаками процента значение из поля ввода (txtSearch.Text), которое передается в string.Format? В таком случае надо между фигурным скобками подставить порядковый номер параметра (он начинается с 0): string.Format("%{0}%", txtSearch.Text)

PS Из соображений безопасности (чтобы избежать SQL-инъекции) крайне не рекомендуется напрямую копировать в строку запроса сырые, непроверенные, данные из ввода пользователя - а вы сделали именно так. В учебной задаче это допустимо, но лучше сразу привыкать делать по уму: например, использовать в строке запроса параметры и передавать ввод через них.
Ответ написан
Комментировать
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
извлекая строку из БД, обычно у ваз должна быть модель.. или как ее там.. класс который примет поля по значения (или IEnemerable экземпларов..
потом все было бы проще, в тч вывод в нужном форматировании..
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы