Jak uzyskać dane z bazy danych w C #? [duplikować]

Jan 17 2021

Potrzebuję danych z bazy danych sqlite, ale pojawia się ten błąd:

System.InvalidCastException: „Określone rzutowanie jest nieprawidłowe.”

Czy zmieniam typ danych w zły sposób?

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

Struktura mojej bazy danych jest taka sama jak pól w kodzie. Kolumny są typu Textlub intw bazie danych - znowu takie same jak typ w ()

edytuj> Zapytanie:

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

Struktura tabeli DB User

Odpowiedzi

MD.RAKIBHASAN Jan 17 2021 at 17:58

próbujesz przekonwertować wartość lub obiekt na jego reprezentację w postaci ciągu przy użyciu operatora rzutowania. Po uruchomieniu programu pojawi się komunikat „System.InvalidCastException: Nie można rzutować obiektu typu„ System.Int32 ”na typ„ System.String ”."

Metoda ToString () jest definiowana przez klasę Object i dlatego jest dziedziczona lub zastępowana przez wszystkie typy zarządzane. Więc tutaj nazywamy jego metodę ToString, ponieważ z powodzeniem zamienia ona wystąpienie dowolnego typu na jego reprezentację w postaci ciągu.

(int) rdr ["Id"] Tutaj jest problem. możesz użyć Convert.ToInt32 (rdr ["Id"]), aby rozwiązać problem.