2010-09-30 10 views
6

W moim projekcie używam System.Data.SQLite. Baza danych zawiera tabelę Tags, która zawiera początkowe pole autoinkrementacji ID (typ Integer). Kiedy piszę:Jak zwrócić wartość autoinkrementacji w kwerendzie wstawiania w 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(); 
} 

Program Visual Studio stwierdził, że operacja nie jest obsługiwana. Jak to naprawić?

Błąd występuje na linii: rada

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

Gdzie jest kod roboczych? Mam ten sam problem, ale uważam "SELECT last_insert_rowid()" za irytująco mało precyzyjny. Jak ustawić @name? Gdzie jest "SELECT last_insert_rowid()"? Na marginesie: Jaką funkcjonalność dodałeś do Calibre? ;) – hoytster

+0

Myślę, że nie można ustawić @name. Twój klucz musi mieć nazwę "ID". "SELECT last_insert_rowid()" działa z ostatnią wstawką. – dublicator

Odpowiedz

9

znalazłem zapytanie robocza:

SELECT last_insert_rowid() 
+0

Jak to działa? Dostaję błąd składni: INSERT STATEMENT INSERT INTO Orders (NAME) VALUES (@ P0) SELECT last_insert_rowid() – sproketboy

-1

I zużywać procedury.

W SQL Server ma zmienną systemową @@IDENTITY. zwraca ostatnią wartość 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 nie ma @@ IDENTITY – dublicator

+0

Niestety. nie wiedziałem, że używasz SQLite. Działa w SqlServer – AEMLoviji

Powiązane problemy