C # db'den nasıl veri alınır? [çiftleme]
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 Text
veya int
veritabanı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
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.