textbox ошибка наложения типов (sql query)

234
23 ноября 2017, 00:35

Выдает эту ошибку

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);

Что не так с тексбоксами ?

Answer 1

Для того, чтобы разобраться, где возникает ошибка в этом коде:

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]), если нет, то ищите проблему в неявном преобразовании, где возможны ошибки с типом (это места, где я написал "проверьте тип данных").

Места, с точно такой же ошибкой:

  • Unable to cast object of type 'System.Windows.Forms.TextBox' to type 'System.IConvertible'
  • Unable to cast object of type 'system.windows.forms.textbox' to type 'System.IConvertible' error
  • Unable to cast object of type 'system.windows.forms.textbox' to type 'System.IConvertible' error for c# form

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

И крайний совет, относительно преобразования данных, я бы рекомендовал использовать вместо метода Convert.ToInt32 местод int.TryParse (а также метод Byte.TryParse), лишь по причине того, что метод не упадет с исключением, если не удалось преобразование.

Метод Int32.TryParse (String, Int32) - преобразует строковое представление числа в эквивалентное ему 32-битовое целое число со знаком. Возвращает значение, указывающее, успешно ли выполнено преобразование.

READ ALSO
Подпись строки DataGridView

Подпись строки DataGridView

Пытаюсь сделать подпись строк DataGridView в Visual studio 2017 Делаю также, как находил в интернете, но не работает ничего

324
Запрос из Xamarin.Forms к Web Api

Запрос из Xamarin.Forms к Web Api

Есть ASPNET Web Api приложение, защищенное Azure AD (просто шаблон web api, и выбрана аутентификация через облако)

240
Проблема с биндингом ObservableCollection к ItemsControl

Проблема с биндингом ObservableCollection к ItemsControl

Доброе время сутокПрошу помочь найти, или указать в чём ошибка в следующей ситуации

190