2010-09-30 3 views
6

Nel mio progetto ho uso System.Data.SQLite. Database tavolo Tags, che contiene autoincrement campo primario ID (tipo Integer). Quando scrivo:Come restituire valore autoincrement in query di inserimento a 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 ha dichiarato che l'operazione non è supportata. Come sistemarlo?

errore si verifica on line: consigli

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

Dov'è il codice di lavoro? Ho lo stesso problema, ma trovo che "SELECT last_insert_rowid()" sia fastidiosamente vago. Come viene impostato @name? Dove va "SELECT last_insert_rowid()" vai? A parte: quale funzionalità hai aggiunto a Calibre? ;) – hoytster

+0

Penso che non si possa impostare @name. La tua chiave deve avere il nome "Id". "SELECT last_insert_rowid()" funziona con l'ultimo inserimento. – dublicator

risposta

9

ho trovato interrogazione lavorare:

SELECT last_insert_rowid() 
+0

Come funziona? Ottengo errore di sintassi: INSERT INSERT INTO Ordini VALORI (nome) (@ P0) Selezionare last_insert_rowid() – sproketboy

-1

I utilizzare stored procedure.

in SQL Server ha @@IDENTITY sistema variabile. restituisce l'ultimo valore autoincrement

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 non è @@ IDENTITY – dublicator

+0

spiacenti. non sapevo che stai usando SQLite. Funziona in SqlServer – AEMLoviji