Come ottenere dati da db in c #? [duplicare]
Ho bisogno di ottenere dati dal database sqlite, ma ottengo questo errore:
System.InvalidCastException: "Il cast specificato non è valido."
Sto cambiando il tipo di dati in modo sbagliato?
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();
La struttura del mio database è la stessa dei campi nel codice. Le colonne sono di tipo Text
o int
nel database - di nuovo lo stesso del tipo in ()
modifica> Query:
public string GetUsersByName(string name, string surname)
{
return "select * from user where name LIKE '%" + name + "%' and surname LIKE '%" + surname + "%'";
}
Struttura della tabella DB User
Risposte
stai tentando di convertire un valore o un oggetto nella sua rappresentazione di stringa utilizzando un operatore di casting. Quando si esegue il programma si otterrà "System.InvalidCastException: Impossibile eseguire il cast dell'oggetto di tipo" System.Int32 "per digitare" System.String "."
Il metodo ToString () è definito dalla classe Object e quindi viene ereditato o sovrascritto da tutti i tipi gestiti. Quindi, qui chiamiamo il suo metodo ToString perché converte con successo un'istanza di qualsiasi tipo nella sua rappresentazione di stringa.
(int) rdr ["Id"] Ecco il problema. puoi usare Convert.ToInt32 (rdr ["Id"]) per risolvere il tuo problema.