2010-09-30 47 views
6

En mi proyecto uso System.Data.SQLite. La base de datos tiene la tabla Tags, que contiene el campo primario autoincrement ID (tipo Integer). Cuando escribo:¿Cómo devolver el valor de autoincrement en Insertar consulta en 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 dijo que la operación no es compatible. ¿Como arreglarlo?

Se produce un error en la línea: consejos

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

¿Dónde está el código de trabajo? Tengo el mismo problema, pero considero que "SELECT last_insert_rowid()" es molestamente vago. ¿Cómo se establece @name? ¿Dónde va "SELECT last_insert_rowid()"? Aparte: ¿Qué funcionalidad has agregado a Calibre? ;) – hoytster

+0

Creo que no puedes establecer @name. Tu clave debe tener el nombre 'Id'. "SELECCIONE last_insert_rowid()" trabajo con la última inserción. – dublicator

Respuesta

9

encontré consulta de trabajo:

SELECT last_insert_rowid() 
+0

¿Cómo funciona eso? Recibo un error de sintaxis: INSERTAR DECLARACIÓN INSERTAR EN Pedidos (NOMBRE) VALORES (@ P0) SELECCIONAR last_insert_rowid() – sproketboy

-1

I para el uso de procedimientos almacenados.

en SQL Server tiene @@IDENTITY variable del sistema. devuelve el último valor de incremento automático

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 no ha @@ IDENTITY – dublicator

+0

Lo siento. No sabía que estás usando SQLite. Funciona en SqlServer – AEMLoviji

Cuestiones relacionadas