Как получить данные из db в c #? [дубликат]

Jan 17 2021

Мне нужно получить данные из базы данных sqlite, но я получаю эту ошибку:

System.InvalidCastException: 'Указанное приведение недопустимо.'

Я плохо меняю тип данных?

conn.Open();
string stm = new CustomQueries().GetUsersByName(this.searchedName, this.searchedSurname);

SQLiteCommand cmd = new SQLiteCommand(stm, conn);
SQLiteDataReader rdr = cmd.ExecuteReader();

while (rdr.Read())
{
    this.personResults.Add(new Person(
                    (int)rdr["Id"],
                    (int)rdr["School_id"],
                    (int)rdr["Role_id"],
                    (string)rdr["Name"],
                    (string)rdr["Surname"],
                    (int)rdr["Study_year"],
                    (string)rdr["Identification_number"],
                    (string)rdr["Address"],
                    (string)rdr["Phone"],
                    (string)rdr["Email"],
                    (int)rdr["Age"],
                    (string)rdr["Birth_date"],
                    (string)rdr["Year_letter"]
                    ));
}

conn.Close();

Моя структура базы данных такая же, как поля в коде. Столбцы имеют тип Textили intв базе данных - опять же, как в ()

редактировать> Запрос:

 public string GetUsersByName(string name, string surname)
        {
            return "select * from user where name LIKE '%" + name + "%' and surname LIKE '%" + surname + "%'";
        }

Структура таблицы пользователей БД

Ответы

MD.RAKIBHASAN Jan 17 2021 at 17:58

вы пытаетесь преобразовать значение или объект в его строковое представление с помощью оператора приведения. При выполнении программы вы получите сообщение «System.InvalidCastException: невозможно преобразовать объект типа 'System.Int32' в тип 'System.String'».

Метод ToString () определяется классом Object и поэтому либо наследуется, либо переопределяется всеми управляемыми типами. Итак, здесь мы вызываем его метод ToString, потому что он успешно преобразует экземпляр любого типа в его строковое представление.

(int) rdr ["Id"] Вот в чем проблема. вы можете использовать Convert.ToInt32 (rdr ["Id"]), чтобы решить вашу проблему.