奇怪的结果

时间:2009-11-05 00:19:00

标签: sqlite

当我作为我的第一个推荐运行时,我得到一个错误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();
        }

2 个答案:

答案 0 :(得分:1)

为什么最后一个last_insert_rowid()在那里?在第二次插入之后,你调用last_insert_rowid时没有选择或任何东西来识别你想用它做什么。

你必须在它前面放一个选择来检索你的值吗?

答案 1 :(得分:0)

您正尝试在一个语句中执行2个sql命令。您需要将2个语句拆分为2个调用,并从第一个语句返回插入的id。

另一个建议是存储过程,但我认为sqlite不支持这些。