จะรับข้อมูลจาก db ใน c # ได้อย่างไร [ซ้ำ]
ฉันต้องการรับข้อมูลจากฐานข้อมูล sqlite แต่ฉันได้รับข้อผิดพลาดนี้:
System.InvalidCastException: 'แคสต์ที่ระบุไม่ถูกต้อง'
ฉันเปลี่ยนประเภทของข้อมูลในทางที่ไม่ดีหรือไม่?
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();
โครงสร้างฐานข้อมูลของฉันเหมือนกับฟิลด์ในโค้ด คอลัมน์เป็นประเภทText
หรือint
ในฐานข้อมูล - อีกครั้งเหมือนกับพิมพ์ใน ()
แก้ไข> แบบสอบถาม:
public string GetUsersByName(string name, string surname)
{
return "select * from user where name LIKE '%" + name + "%' and surname LIKE '%" + surname + "%'";
}
โครงสร้างตาราง DB User
คำตอบ
คุณกำลังพยายามแปลงค่าหรือวัตถุเป็นการแสดงสตริงโดยใช้ตัวดำเนินการหล่อ เมื่อคุณรันโปรแกรมคุณจะได้รับ "System.InvalidCastException: ไม่สามารถส่งออบเจ็กต์ประเภท 'System.Int32' เพื่อพิมพ์ 'System.String'
เมธอด ToString () ถูกกำหนดโดยคลาสอ็อบเจ็กต์ดังนั้นจึงถูกสืบทอดหรือถูกแทนที่โดยชนิดที่มีการจัดการทั้งหมด ดังนั้นในที่นี้เราจึงเรียกเมธอด ToString เนื่องจากมันแอบแฝงอินสแตนซ์ประเภทใดก็ได้ในการแสดงสตริง
(int) rdr ["Id"] นี่คือปัญหา คุณสามารถใช้ Convert ToInt32 (rdr ["Id"]) เพื่อแก้ไขปัญหาของคุณ