c# - 如何在 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();
我的数据库结构与代码中的字段相同。列属于类型Text
或int
在数据库中 - 再次与 () 中的类型相同
编辑>查询:
public string GetUsersByName(string name, string surname)
{
return "select * from user where name LIKE '%" + name + "%' and surname LIKE '%" + surname + "%'";
}
数据库用户表结构
解决方案
您正在尝试使用强制转换运算符将值或对象转换为其字符串表示形式。执行程序时,您将收到“ System.InvalidCastException : Unable to cast object of type 'System.Int32' to type 'System.String'。”
ToString() 方法由 Object 类定义,因此被所有托管类型继承或覆盖。所以,这里我们调用它的 ToString 方法,因为它成功地将任何类型的实例转换为它的字符串表示。
(int)rdr["Id"] 这就是问题所在。您可以使用 Convert.ToInt32(rdr["Id"]) 来解决您的问题。
推荐阅读
- c# - C#访问基类的隐式运算符
- laravel - 在 Laravel 5 中更新个人资料更新表单中的单个字段
- ruby-on-rails - docker-compose rails 应用程序无法在端口 3000 上访问
- composer-php - 使用 Composer 将“cybersource/rest-client-php”添加到供应商文件夹后无法加载 prestashop
- laravel - 具有变量“模型”类型的 Laravel 关系组合成一个关系
- java - 带有 ACL 的 Jade 代理协议
- django - 为什么我当前的用户看不到自己的收件箱,但可以看到其他用户的收件箱?
- react-native - 错误:ENOENT:没有这样的文件或目录 expo-av
- linux - 如何最大化 mmap 性能?
- git - 将一个文件重置为初始状态并删除所有更改历史记录