C # db'den nasıl veri alınır? [çiftleme]

Jan 17 2021

Sqlite veritabanından veri almam gerekiyor, ancak şu hatayı alıyorum:

System.InvalidCastException: 'Belirtilen atama geçerli değil.'

Veri türünü kötü bir şekilde değiştiriyor muyum?

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

Veritabanı yapım koddaki alanlarla aynı. Sütunlar türdedir Textveya intveritabanındadır - yine in () türünde olduğu gibi

düzenle> Sorgu:

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

DB Kullanıcı tablosu yapısı

Yanıtlar

MD.RAKIBHASAN Jan 17 2021 at 17:58

bir çevrim operatörü kullanarak bir değeri veya nesneyi dize gösterimine dönüştürmeye çalışıyorsunuz. Programı çalıştırdığınızda "System.InvalidCastException: 'System.Int32' türündeki nesne 'System.String' türüne dönüştürülemiyor."

ToString () yöntemi, Object sınıfı tarafından tanımlanır ve bu nedenle, tüm yönetilen türler tarafından miras alınır veya geçersiz kılınır. Dolayısıyla, burada ToString yöntemini çağırıyoruz çünkü herhangi bir türden bir örneği başarılı bir şekilde dizgi temsiline dönüştürüyor.

(int) rdr ["Kimlik"] İşte sorun. Sorununuzu çözmek için Convert.ToInt32 (rdr ["Id"]) kullanabilirsiniz.