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

Ссылка скопирована
1 ответ
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();     } }

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:UserswekolDocumentsGitHubRegister-Autorization-ClearMainMenuAdminPanel.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:UserswekolDocumentsGitHubRegister-Autorization-ClearMainMenuAdminPanel.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)

Дополнительно:

Ответы:

1) Стоит добавить тег C#, проблема явно не в бд, а в формировании запроса.
2) Неплохо бы проверить что возвращает string.Format("%{}%", txtSearch.Text), думаю лажа именно там.

  • 1) Исправил
    2) действительно, строка сомнительная, убрал, сделал прямой ввод по id, все работает. Но как мне реализовать примерный поиск в бд по логину. ( именно эта строка отвечала за это)
  • vaiman2,

    действительно, строка сомнительная, убрал

    предполагается что стоит разобраться с "неправильностью", которую вы не описали, подозреваю что в {} должен быть параметр, который берется из txtSearch.Text...

Полагаю, вы хотели подставить между знаками процента значение из поля ввода (txtSearch.Text), которое передается в string.Format? В таком случае надо между фигурным скобками подставить порядковый номер параметра (он начинается с 0): string.Format("%{0}%", txtSearch.Text)

PS Из соображений безопасности (чтобы избежать SQL-инъекции) крайне не рекомендуется напрямую копировать в строку запроса сырые, непроверенные, данные из ввода пользователя - а вы сделали именно так. В учебной задаче это допустимо, но лучше сразу привыкать делать по уму: например, использовать в строке запроса параметры и передавать ввод через них.

извлекая строку из БД, обычно у ваз должна быть модель.. или как ее там.. класс который примет поля по значения (или IEnemerable экземпларов..
потом все было бы проще, в тч вывод в нужном форматировании..

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Дмитрий К. Ответ

Проблема "Input string was not in a correct format" обычно возникает при попытке преобразования строки в другой тип данных, когда строка имеет неправильный формат. Это может произойти, например, при попытке преобразовать строку в число или дату, когда строка содержит символы, которые не могут быть преобразованы.

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

1. Проверьте, что строка содержит только цифры, если вы пытаетесь преобразовать ее в число. Вы можете использовать функцию is_numeric() для проверки этого.

2. Если вы пытаетесь преобразовать строку в дату, убедитесь, что строка соответствует заданному формату даты. Например, если вы используете функцию date_create_from_format(), убедитесь, что строка соответствует формату, указанному в параметре.

3. Проверьте наличие лишних пробелов или специальных символов в строке, которые могут помешать корректному преобразованию.

Пример кода на PHP, демонстрирующий как проверить и преобразовать строку в число:

$string = "12345";
 
if (is_numeric($string)) {
    $number = (int)$string;
    echo "Число: " . $number;
} else {
    echo "Строка не является числом";
}

$string = "12345"; if (is_numeric($string)) { $number = (int)$string; echo "Число: " . $number; } else { echo "Строка не является числом"; }

Этот код сначала проверяет, является ли строка числом с помощью функции is_numeric(), а затем преобразует ее в целое число с помощью приведения типов (int). Если строка не является числом, выводится соответствующее сообщение.

Надеюсь, эти советы помогут вам исправить ошибку "Input string was not in a correct format" и успешно преобразовать строку в нужный формат данных.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно