我正在制作图书馆管理软件。我有一种获取图书信息的方法:
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文本不为空);
答案 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
参数。