无法读取存在的值

时间:2018-10-06 10:51:02

标签: c# sqlite uwp

我正在制作图书馆管理软件。我有一种获取图书信息的方法:

public static Book GetInfoAboutBook(string title)
    {
        using (SqliteConnection db = new SqliteConnection("Filename=" + fileName))
        {
            db.Open();

            Book b = new Book();

            SqliteCommand sqliteCommand = new SqliteCommand
            {
                Connection = db,
                CommandText = "select Title, Author, Publisher, ISBN, Quantity, CoverImageLocation, Tags from MyBooks where Title = '@Title'",
            };

            sqliteCommand.Parameters.AddWithValue("@Title", title);

            SqliteDataReader query = sqliteCommand.ExecuteReader();

            if(query.Read())
            {
                b.Title = query.GetString(0);
                b.Author = query.GetString(1);
                b.Publisher = query.GetString(2);
                b.Quantity = query.GetInt32(3);
                b.CoverImageLocation = query.GetString(4);
                b.Tags = query.GetString(5);
            }

            return b;
        }
    }

'b'永远不会被初始化,无论输入什么。我确保所有输入实际上都存在于数据库中。但这行不通。我调试了此功能。 query.Read()永远不会成功。这就是book对象保持null的方式。这是Book类:

public class Book
{
    public string Title { get; set; }
    public string Author { get; set; }
    public string Publisher { get; set; }
    public string ISBN { get; set; }

    public int Quantity { get; set; }

    public string CoverImageLocation { get; set; }

    public string Tags { get; set; }
}

注意:标题必定是唯一的。

这是数据库的架构:

  

创建表MyBooks(标题文本主键,作者文本不为空,发布者文本不为空,ISBN文本不为空,Quantity int不为空,CoverImageLocation文本不为空,Tags文本不为空);

1 个答案:

答案 0 :(得分:6)

问题出在您的SQL中:

if(nextDownloadDate > today) //Which mean it should have been updated

正在寻找一本标题为next download date的书-在并不是在寻找参数值,因为您将select Title, Author, Publisher, ISBN, Quantity, CoverImageLocation, Tags from MyBooks where Title = '@Title' 引为文字文本。您要使用以下SQL:

@Title

差异恰好在结尾处。该SQL将在搜索中使用@Title参数。