Member 11297177 Ответов: 2

Невозможно привести объект типа "system.int32" к типу "system.string".


int Number = int.Parse(dr.GetString(0));
               combocustomer.Items.Add(Number);


найдите приведенный выше код , я собираюсь извлечь customer_ID из БД в выпадающий список front end ..

whule featching data столкнулся с этой ошибкой messahe .

не могли бы вы помочь мне в том же самом

Что я уже пробовал:

combocustomer.Items.Clear();
           con.Open();
           string str = "select * from Tblcustomer";
           SqlCommand cmd = new SqlCommand(str, con);
           SqlDataReader dr = cmd.ExecuteReader();
           while (dr.Read())
           {
               int Number = int.Parse(dr.GetString(0));
               combocustomer.Items.Add(Number);
           }
           con.Close();

2 Ответов

Рейтинг:
2

Garth J Lancaster

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

Я бы сказал с первого взгляда, что

int Number = int.Parse(dr.GetString(0));
это может быть проблематично, нужно было бы задаться вопросом, почему вы получаете число в виде строки (которая в сообщениях об ошибках говорит: "Я не могу этого сделать"), а затем разбираете его

. Если столбец в базе данных числовой, предположим целое число, то почему бы и нет
int Number = (dr.GetInt32(0));
??

Кроме того, если вы собираетесь опубликовать вопрос(ы) о базе данных, не подумали ли вы включить краткое определение соответствующей таблицы ?

Возможно, вы также могли бы изучить любые справочные материалы, которые у вас есть, или google 'C# datareader', чтобы узнать, как получить столбцы различных типов данных


Maciej Los

5ed!

Рейтинг:
2

Maciej Los

В дополнение к решению №1 по Гарт Джей Ланкастер
Зачем загружать полную таблицу, а не только интересную часть?
Заменить этот:

select * from Tblcustomer

с:
select NameOfFieldYouWantToGet from Tblcustomer


КСТАТИ: комбинированный список[^] контроль имеет несколько полезных свойств, таких как:
Свойство Источника Данных (System.Окна.Формы) | Microsoft Docs[^]
Свойство DisplayMember (System.Окна.Формы) | Microsoft Docs[^]
Свойство ValueMember (System.Окна.Формы) | Microsoft Docs[^]

Вывод: Если вы хотите загрузить данные о клиентах, вы можете сделать это следующим образом:
DataTable dt = new DataTable();
string str = "select CustomerID, CONCAT(LastName, ' ', LEFT(FirstName, 1)) AS CustomerName from Tblcustomer";
SqlCommand cmd = new SqlCommand(str, con);
SqlDataReader dr = cmd.ExecuteReader();
dt.Load(dr);
combocustomer.ValueMember = "CustomerID"
combocustomer.DisplayMember = "CustomerName";
combocustomer.DataSource = dt;


заключительное Примечание: использовать using(disposable_object do = new disposable_object) инструкция по "автоматическому управлению" одноразовыми объектами. Видеть: Использование объектов, реализующих IDisposable | Microsoft Docs[^]
DataTable dt = new DataTable()
using(SqlConnection connection = new SqlConnection("connectionstring_here"))
{
    connection.Open()
    using(SqlCommand command = new SqlCommand("commandtext_here"), connection)
        using(SqlDataReader reader = command.ExecueReader())
            dt.Load(reader)
    connection.Close()
}
//further instructions here