Làm cách nào để lấy dữ liệu từ db trong c #? [bản sao]

Jan 17 2021

Tôi cần lấy dữ liệu từ cơ sở dữ liệu sqlite, nhưng tôi gặp lỗi này:

System.InvalidCastException: 'Truyền được chỉ định không hợp lệ.'

Tôi có đang thay đổi loại dữ liệu theo cách xấu không?

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

Cấu trúc cơ sở dữ liệu của tôi giống như các trường trong mã. Các cột thuộc loại Texthoặc inttrong cơ sở dữ liệu - một lần nữa giống như loại trong ()

chỉnh sửa> Truy vấn:

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

Cấu trúc bảng người dùng DB

Trả lời

MD.RAKIBHASAN Jan 17 2021 at 17:58

bạn đang cố gắng chuyển đổi một giá trị hoặc một đối tượng thành biểu diễn chuỗi của nó bằng cách sử dụng toán tử ép kiểu. Khi bạn thực thi chương trình, bạn sẽ nhận được "System.InvalidCastException: Không thể truyền đối tượng kiểu 'System.Int32' sang kiểu 'System.String'."

Phương thức ToString () được định nghĩa bởi lớp Đối tượng và do đó được kế thừa hoặc ghi đè bởi tất cả các kiểu được quản lý. Vì vậy, ở đây chúng tôi gọi phương thức ToString của nó vì nó đã che giấu thành công một thể hiện của bất kỳ kiểu nào đối với biểu diễn chuỗi của nó.

(int) rdr ["Id"] Đây là vấn đề. bạn có thể sử dụng Convert.ToInt32 (rdr ["Id"]) để khắc phục sự cố của mình.