我厌倦了搜索,所以这是我的第一个 SO 问题,希望有人遇到同样的问题并且可以帮助我
目标
我正在尝试使用 SQLite 数据库存储我的应用程序数据
应用说明
Windows 8 应用 C# XAML 与本地 SQLite 数据库使用SQLite for Windows 运行时扩展和sqlite-net库
表定义
public class Product {
private int _id;
[SQLite.PrimaryKey, SQLite.AutoIncrement]
public int ID
{
get { return _id; }
set { _id = value; }
}
private string _date;
public string DATE
{
get { return _date; }
set { _date = value; }
}
private string _desc;
public string DESC
{
get { return _desc; }
set { _desc = value; }
}
}
问题1
public int Insert (object obj)
描述如下:
插入给定对象并检索其自动递增的主键(如果有)。
但是,每次我插入一行时,它都会返回1。我可以使用自动增量 ID 成功插入,但不知何故它没有返回我的 ID。为什么?
问题 2
我可以插入新行但不能删除它们
解决问题 1 以获取最后一行生成的 ID,我尝试删除行但没有成功。
请参阅始终失败的示例测试:
using (var db = new SQLiteConnection(Path.Combine(_path, _dbname)))
{
var p1 = new Product() { DESC = "insert1", DATE = DateTime.Now.ToString() };
db.Insert(p1);
p1.ID = 1;
var p2 = new Product() { DESC = "insert2", DATE = DateTime.Now.ToString() };
// I am sure that this row is getting ID 2, so it will not have a wrong ID
p2.ID = 2;
db.Insert(p2);
var p3 = new Product() { DESC = "insert3", DATE = DateTime.Now.ToString() };
db.Insert(p3);
p3.ID = 3;
db.Delete<Product>(p2);
}
如您所见,我尝试插入 3 行并删除第二行。行已插入,但我得到以下SQLite.SQLiteException异常:
由于未完成的语句或未完成的备份而无法关闭
为什么?在那之前和之后我不打开其他连接。
提前致谢
解决了
问题 1
+1 并感谢@Bridgey 指出该功能与其描述不匹配并进行相关搜索
该函数不会像它所说的那样返回 ID,但它定义了对象 ID。因此,当我插入一个新Product时,Product.ID将具有最后插入的 ID。
问题 2
我改成现在它可以工作了db.Delete<Product>(p2);
。db.Delete(p2);
SQLite-net 正确地将行标识为Product。我仍然不知道为什么由于未完成的语句或未完成的备份异常而无法关闭。如果有人知道为什么请告诉我。