2013-01-24 55 views
0

我有一個使用sqlite客戶端的應用程序。在應用程序中,我將數據插入表中,並且需要自動遞增的Id。無論如何要在executivetenonquery中獲得id? s.th喜歡sqlparameter或...如何在wp中插入一行並在sqlite中返回自動增量值?

我正在使用下面的方法來獲取數據,我認爲rec變量持有的id,但它始終rec = 1,我不知道這是什麼好?

   int x= (System.Windows.Application.Current as App).db.Insert 
<CsWidget>(ObjWidget, @"Insert into Tbl_Widget (Name) values(@Name"); 

      public int Insert<T>(T obj, string statement) where T : new() 
        { 
          Open(); 
          SQLiteCommand cmd = db.CreateCommand(statement);    
          int rec = cmd.ExecuteNonQuery(obj); 
          return rec; 
        } 
+0

我甚至在發言結束時添加SELECT last_insert_rowid(),但我不知道如何獲取該值 – Finutv

+1

無關的評論:在移動設備上親愛的上帝,爲什麼有staight式SQL使用RDMBS命令。只需使用Linq2SQL。 – JustinAngel

+0

我是Windows開發新手,這是我發現的「很好的參考」。所以這將是很好,如果你可以給我一個更多的海峽鏈接/引用我可以開始 – Finutv

回答

0

嘗試使用ExecuteScalar方法代替ExecuteNonQuery。它可以根據你的SQLite包裝工作。如果不是插入後的單獨查詢是唯一的方法。

+0

我試過ExecuteScalar,但它返回null。我究竟做錯了什麼? – Finutv

+0

我什麼也沒想。在這種情況下,ExecuteScalar也可能不起作用。這取決於包裝庫的實現。 –

0

正如@ gleb.kudr所說,插入後的單獨查詢是唯一的方法。

cmd.ExecuteNonQuery(); 
cmd.CommandText = "SELECT LAST_INSERT_ROWID()"; 

object r = cmd.ExecuteScalar(); 

int id = 0; 
int.TryParse(r.ToString(), out id); 
+0

我試過這個,它在executablecalar()中返回錯誤「綁定或列索引超出範圍」。這讓我瘋狂。有什麼建議嗎? – Finutv

相關問題