Come ottenere dati da db in c #? [duplicare]

Jan 17 2021

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 Texto intnel 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

MD.RAKIBHASAN Jan 17 2021 at 17:58

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.