C #에서 db에서 데이터를 얻는 방법은 무엇입니까? [복제]

Jan 17 2021

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 사용자 테이블 구조

답변

MD.RAKIBHASAN Jan 17 2021 at 17:58

캐스팅 연산자를 사용하여 값 또는 개체를 문자열 표현으로 변환하려고합니다. 프로그램을 실행하면 "System.InvalidCastException : 'System.Int32'유형의 개체를 'System.String'유형으로 캐스팅 할 수 없습니다."라는 메시지가 표시됩니다.

ToString () 메서드는 Object 클래스에 의해 정의되므로 모든 관리 형식에 의해 상속되거나 재정의됩니다. 따라서 여기에서는 모든 유형의 인스턴스를 문자열 표현으로 성공적으로 변환했기 때문에 ToString 메서드를 호출합니다.

(int) rdr [ "Id"] 여기에 문제가 있습니다. Convert.ToInt32 (rdr [ "Id"])를 사용하여 문제를 해결할 수 있습니다.