Comment obtenir des données de db en c #? [dupliquer]
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 Text
ou int
dans 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
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.