2010-09-30 157 views
6

在我的项目中,我使用System.Data.SQLite。数据库有表Tags,其中包含自动增量主字段ID(类型Integer)。当我写:如何在SQLite插入查询中返回自动增量值?

using (SQLiteCommand command = conn.CreateCommand()) 
{ 
    command.CommandText = "insert into Tags(name) values(@name) returning into @id"; 
    command.Parameters.Add("@id", DbType.Int32).Direction = ParameterDirection.Output; 
    command.ExecuteNonQuery(); 
} 

Visual Studio说,该操作不支持。如何解决它?发生在行

错误:

command.Parameters.Add("@id", DbType.Int32).Direction = ParameterDirection.Output; 
+0

在哪里工作代码?我有同样的问题,但我发现“SELECT last_insert_rowid()”令人讨厌地模糊。 @name如何设置? “SELECT last_insert_rowid()”去哪里?除此之外:您为Calibre添加了哪些功能? ;) – hoytster 2012-02-17 23:52:22

+0

我想,你不能设置@name。你的钥匙必须有名字'Id'。 “SELECT last_insert_rowid()”使用最后一个插入。 – dublicator 2012-02-22 08:16:12

回答

9

我找到工作查询:

SELECT last_insert_rowid() 
+0

这是如何工作的?我得到语法错误:INSERT语句插入到订单(名称)VALUES(@ P0)SELECT last_insert_rowid() – sproketboy 2011-09-23 14:46:40

-1

我建议使用存储过程。

IN SQL Server有@@IDENTITY系统变量。它返回最后一个自动增量值

CREATE PROCEDURE SPGetLastAutoInc @name varchar, @lastAutoResult INT OUTPUT AS 

INSERT INTO Tags(name) values(@name) 


SET @lastAutoResult = @@IDENTITY 

-- Return the number of all items ordered. 
RETURN lastAutoResult 
GO 
+2

SQLite没有@@ IDENTITY – dublicator 2010-09-30 06:52:20

+0

对不起。我不知道你正在使用SQLite。它在SqlServer中工作 – AEMLoviji 2010-09-30 06:56:56