Wie bekomme ich Daten von db in c #? [Duplikat]
Ich muss Daten aus der SQLite-Datenbank abrufen, erhalte jedoch den folgenden Fehler:
System.InvalidCastException: 'Die angegebene Besetzung ist ungültig.'
Ändere ich den Datentyp schlecht?
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();
Meine Datenbankstruktur entspricht den Feldern im Code. Spalten sind vom Typ Text
oder int
in der Datenbank - wieder dasselbe wie Typ in ()
bearbeiten> Abfrage:
public string GetUsersByName(string name, string surname)
{
return "select * from user where name LIKE '%" + name + "%' and surname LIKE '%" + surname + "%'";
}
Struktur der DB-Benutzertabelle
Antworten
Sie versuchen, einen Wert oder ein Objekt mithilfe eines Casting-Operators in seine Zeichenfolgendarstellung zu konvertieren. Wenn Sie das Programm ausführen, erhalten Sie "System.InvalidCastException: Objekt vom Typ 'System.Int32' kann nicht in Typ 'System.String' umgewandelt werden."
Die ToString () -Methode wird von der Object-Klasse definiert und daher von allen verwalteten Typen entweder geerbt oder überschrieben. Hier nennen wir also die ToString-Methode, weil sie eine Instanz eines beliebigen Typs erfolgreich in ihre Zeichenfolgendarstellung umwandelt.
(int) rdr ["Id"] Hier ist das Problem. Sie können Convert.ToInt32 (rdr ["Id"]) verwenden, um Ihr Problem zu beheben.