【问题标题】:SQLiteConnection QuerySQLite连接查询
【发布时间】:2017-05-03 04:52:50
【问题描述】:

我正在尝试使用 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());
            }
        }
    }
}

我遇到了异常:“对象引用未设置为对象的实例”

这是我的用户类:

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;
    }
}

有谁知道我做错了什么?

谢谢

【问题讨论】:

标签: c# sqlite uwp


【解决方案1】:

您没有带来单个用户。您正在选择“*”。

你也没有传递任何参数。因此,不要将 Null 完全删除。

我还看到您正在检查 query != null 您是否不必这样做。如果没有数据,您将收到计数为0

所以你的查询应该是

List<User> query = connection.Query<User>("Select * From User");

【讨论】:

    【解决方案2】:

    尝试将您的用户 ID 条目和用户名条目存储到单独但索引相关的列表中。然后循环并为这两个列表的每个条目初始化一个 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 子句是为了保证两个查询的索引匹配。

    【讨论】:

    • @user6824563 你知道这个异常是在哪里抛出的吗?你也介意告诉我调试时你的一些本地人是什么
    • 对象中抛出异常 query = connection.Query("Select * From User", null);
    • App.path 只是我的 SQLite 数据库的本地
    • 查看提供的其他答案,我相信您最好的方法是将每一行的用户 ID 和用户名存储到单独的列表中,然后使用前两个列表中的每个条目创建您的用户列表你的初始化。这可以通过一些不太复杂的循环来完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    相关资源
    最近更新 更多