Выдает эту ошибку
Unable to cast object of type 'System.Windows.Forms.TextBox' to type 'System.IConvertible'.'
на мой запрос
shoeseTableAdapter.Insert(idshoes, textBox_madein.Text, textBox_material.Text, textBox_size.Text, Convert.ToInt32(textBox_quantity.Text),sex, Convert.ToByte(s2[0]), Convert.ToInt32(textBox_price.Text), textBox_model.Text);
Что не так с тексбоксами ?
Для того, чтобы разобраться, где возникает ошибка в этом коде:
shoeseTableAdapter.Insert(
idshoes,
textBox_madein.Text,
textBox_material.Text,
textBox_size.Text,
Convert.ToInt32(textBox_quantity.Text),
sex,
Convert.ToByte(s2[0]),
Convert.ToInt32(textBox_price.Text),
textBox_model.Text);
Я бы предложил сделать следующее: вынести передаваемые параметы, которые вы конвертируете при передаче, в отдельные переменные, чтобы удостовериться, что там все работает хорошо. Но и это еще не все, удостоверьтесь, что вы передаете правильные типы данных в метод.
var quantity = Convert.ToInt32(textBox_quantity.Text);
var sTwo = Convert.ToByte(s2[0]); // предполагаемое место ошибки
var price = Convert.ToInt32(textBox_price.Text);
// если до метода ваш код отработал исправно, проверяйте типы данных
shoeseTableAdapter.Insert(
idshoes, // проверьте тип данных
textBox_madein.Text, // строка (string)
textBox_material.Text, // строка (string)
textBox_size.Text, // строка (string)
quantity, // целое число (int)
sex, // проверьте тип данных
sTwo, // байт (byte)
price, // целое число (int)
textBox_model.Text); // строка (string)
Конечно, нужно поставить точку останова и в отладке посмотреть, что у вас хранится в той или иной переменной. Есть предположение, что ошибка кроется в явном преобразовании Convert.ToByte(s2[0])
, если нет, то ищите проблему в неявном преобразовании, где возможны ошибки с типом (это места, где я написал "проверьте тип данных").
Места, с точно такой же ошибкой:
Как вы можете заметить, вопрос достаточно популярный, но по своей сути лишь является следствием невнимательности во время написания кода.
И крайний совет, относительно преобразования данных, я бы рекомендовал использовать вместо метода Convert.ToInt32
местод int.TryParse
(а также метод Byte.TryParse
), лишь по причине того, что метод не упадет с исключением, если не удалось преобразование.
Метод Int32.TryParse (String, Int32)
- преобразует строковое
представление числа в эквивалентное ему 32-битовое целое число со
знаком. Возвращает значение, указывающее, успешно ли выполнено
преобразование.
Пытаюсь сделать подпись строк DataGridView в Visual studio 2017 Делаю также, как находил в интернете, но не работает ничего
Есть ASPNET Web Api приложение, защищенное Azure AD (просто шаблон web api, и выбрана аутентификация через облако)
Доброе время сутокПрошу помочь найти, или указать в чём ошибка в следующей ситуации