当我作为我的第一个推荐运行时,我得到一个错误near "last_insert_rowid"
。这是指最后一个last_insert_rowid();.如果我将光标设置为行command.CommandText =并再次运行它就可以了。
是什么给出的? last_insert_rowid似乎正常工作,为什么第二次插入后的last_insert_rowid不起作用。
我尝试在执行后移动last_insert_rowid(),但仍然出现错误。是什么给了什么?
using (var trans = connection.BeginTransaction())
{
command.CommandText =
"INSERT INTO link_list(link, status, hash_type, hash_id) " +
"VALUES(@link, @status, @hash_type, @hash_id);" +
"INSERT INTO active_dl(linkId, orderNo) " +
"VALUES(last_insert_rowid(), (SELECT COUNT(*) FROM active_dl)); last_insert_rowid();";
command.Parameters.Add("@link", System.Data.DbType.String).Value = link;
command.Parameters.Add("@status", System.Data.DbType.Int32).Value = SiteBase.Status.none;
command.Parameters.Add("@hash_type", System.Data.DbType.Int32).Value = 0;
command.Parameters.Add("@hash_id", System.Data.DbType.Int32).Value = 0;
int rowid = command.ExecuteNonQuery();
trans.Commit();
}
答案 0 :(得分:1)
为什么最后一个last_insert_rowid()在那里?在第二次插入之后,你调用last_insert_rowid时没有选择或任何东西来识别你想用它做什么。
你必须在它前面放一个选择来检索你的值吗?
答案 1 :(得分:0)
您正尝试在一个语句中执行2个sql命令。您需要将2个语句拆分为2个调用,并从第一个语句返回插入的id。
另一个建议是存储过程,但我认为sqlite不支持这些。