SQLiteConnection查询

时间:2017-05-02 20:03:37

标签: c# sqlite uwp

我尝试使用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;
    }
}

有谁知道我做错了什么?

由于

2 个答案:

答案 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子句是为了确保两个查询的索引匹配。