首页 > 解决方案 > 如何在 C# 中从 db 中获取数据?

问题描述

我需要从 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();

我的数据库结构与代码中的字段相同。列属于类型Textint在数据库中 - 再次与 () 中的类型相同

编辑>查询:

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

数据库用户表结构

在此处输入图像描述

标签: c#

解决方案


您正在尝试使用强制转换运算符将值或对象转换为其字符串表示形式。执行程序时,您将收到“ System.InvalidCastException : Unable to cast object of type 'System.Int32' to type 'System.String'。”

ToString() 方法由 Object 类定义,因此被所有托管类型继承或覆盖。所以,这里我们调用它的 ToString 方法,因为它成功地将任何类型的实例转换为它的字符串表示。

(int)rdr["Id"] 这就是问题所在。您可以使用 Convert.ToInt32(rdr["Id"]) 来解决您的问题。


推荐阅读