我尝试使用SQLiteConnection从数据库中选择数据。它是一个UWP应用程序。
public class ResumeModel
{
public List<User> Users { get; set; } = new List<User>();
public ResumeModel()
{
using (var connection = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), App.path))
{
try
{
object query = connection.Query<User>("Select * From User", null);
if(query != null)
{
Users = (List <User>) query;
}
} catch(Exception ex)
{
Debug.Write(ex.ToString());
}
}
}
}
我得到了异常:&#34;对象引用没有设置为对象的实例&#34;
这是我的用户类:
public class User
{
[SQLite.Net.Attributes.PrimaryKey, SQLite.Net.Attributes.AutoIncrement]
public int userID { get; set; }
public String username { get; set; }
public User()
{ }
public User(int userID, string name)
{
this.userID = userID;
this.username = name;
}
}
有谁知道我做错了什么?
由于
答案 0 :(得分:1)
您没有携带单个用户。您正在选择“*”。
此外,您没有传递任何参数。因此,而不是Null
完全删除它。
我也看到你正在检查query != null
你是否必须这样做。如果没有数据,您将收到0
所以你的查询应该是
List<User> query = connection.Query<User>("Select * From User");
答案 1 :(得分:0)
尝试将您的userID条目和用户名条目存储到单独但与索引相关的列表中。然后循环并初始化这两个列表的每个条目的User对象作为构造函数参数。
List<int> userIDs = connection.Query<int>("Select userID From User order by userIDs");
List<string> userNames = connection.Query<string>("Select userName From User order by userIDs");
List<User> Users = new List<User>();
for (int i = 0; i < userIDs.Count(); i++)
{
User addition = new User(userIDs[i], userNames[i]);
Users.add(addition);
}
order by子句是为了确保两个查询的索引匹配。