Wie bekomme ich Daten von db in c #? [Duplikat]

Jan 17 2021

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 Textoder intin 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

MD.RAKIBHASAN Jan 17 2021 at 17:58

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.