Comment obtenir des données de db en c #? [dupliquer]

Jan 17 2021

J'ai besoin d'obtenir des données de la base de données sqlite, mais j'obtiens cette erreur:

System.InvalidCastException: 'La conversion spécifiée n'est pas valide.'

Suis-je en train de modifier le type de données de manière incorrecte?

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

Ma structure de base de données est la même que les champs dans le code. Les colonnes sont de type Textou intdans la base de données - encore une fois identiques au type dans ()

modifier> Requête:

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

Structure de la table des utilisateurs de la base de données

Réponses

MD.RAKIBHASAN Jan 17 2021 at 17:58

vous essayez de convertir une valeur ou un objet en sa représentation sous forme de chaîne à l'aide d'un opérateur de transtypage. Lorsque vous exécutez le programme, vous obtiendrez "System.InvalidCastException: Impossible de convertir l'objet de type 'System.Int32' en type 'System.String'."

La méthode ToString () est définie par la classe Object et est donc héritée ou remplacée par tous les types gérés. Nous appelons donc ici sa méthode ToString car elle a réussi à convertir une instance de n'importe quel type en sa représentation sous forme de chaîne.

(int) rdr ["Id"] Voici le problème. vous pouvez utiliser Convert.ToInt32 (rdr ["Id"]) pour résoudre votre problème.