Jak uzyskać dane z bazy danych w C #? [duplikować]
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 Text
lub int
w 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
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.