Como obter dados do banco de dados em c #? [duplicado]

Jan 17 2021

Preciso obter dados do banco de dados sqlite, mas recebo este erro:

System.InvalidCastException: 'O elenco especificado não é válido.'

Estou alterando o tipo de dados de uma maneira incorreta?

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

Minha estrutura de banco de dados é a mesma dos campos do código. As colunas são do tipo Textou estão intno banco de dados - novamente o mesmo que type em ()

editar> Consulta:

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

Estrutura da tabela do usuário do banco de dados

Respostas

MD.RAKIBHASAN Jan 17 2021 at 17:58

você está tentando converter um valor ou um objeto em sua representação de string usando um operador de conversão. Ao executar o programa, você obterá "System.InvalidCastException: Incapaz de lançar o objeto do tipo 'System.Int32' para o tipo 'System.String'."

O método ToString () é definido pela classe Object e, portanto, é herdado ou substituído por todos os tipos gerenciados. Portanto, aqui chamamos seu método ToString porque ele converte com sucesso uma instância de qualquer tipo em sua representação de string.

(int) rdr ["Id"] Aqui está o problema. você pode usar Convert.ToInt32 (rdr ["Id"]) para corrigir seu problema.