2013-01-21 33 views
0

使用數據適配器/設置在SQL CE中,我確實創建了以下查詢以插入到表中,然後SELECT @@ IDENTITY, 我希望這個SELECT語句返回我將插入到表後,每次學號,這裏是我的查詢:SELECT @@ IDENTITY使用來自C#的SQL Server CE代碼

INSERT INTO [Student] ([Name], [Family], [Address], [Phonenumber]) 
VALUES(@Name,@Family,@Address,@Phonenumber); 
SELECT @@IDENTITY; 

這是我如何打電話詢問:

int x = da.Insert("Albert", "Alexandra", "No4.Oxford", Telnum); 

詮釋X想回到我的ID ...

這裏是錯誤即時獲取:

解析查詢時出錯。 [令牌行數= 4,令牌行偏移= 1,令牌在錯誤= SELECT]

插入查詢它自它的工作原理,但一旦在端即時得到誤差加法SELECT @@ IDENTITY

我真的不知道我做錯了什麼。

+0

你需要像'SELECT ID AS LastID FROM Student WHERE ID = @@ Identity;'看看這個鏈接[Server @@ Identity](http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record /) – MethodMan

+0

你叫'select @@ identity'還是'select @@ identity'?首先會拋出一個錯誤,其次會起作用。 – abatishchev

+0

請參閱beth Massi的博客文章:http://blogs.msdn.com/b/bethmassi/archive/2009/09/15/inserting-master-detail-data-into-a-sql-server-compact-edition -database.aspx – ErikEJ

回答

0

根據MSDN,CE不支持每次執行多個命令,您需要將其作爲兩個命令同步執行。

+0

我認爲你是對的!因爲單獨我可以檢索最後一個ID,但一旦我結合他們即時通訊錯誤!這就是SQL CE的弱點!但我需要確定,如果真的這是一個案例! –

0

如果您希望在一次調用中執行此操作,則需要使用存儲過程而不是Insert,因爲它使用ExecuteNonQuery,它不返回任何記錄。否則,您需要在另一個呼叫中執行選擇以確定身份。

ExecuteNonQuery的返回值是一個整數,表示受您的調用影響的行數。

1

ExecuteNonQuery的返回值將是這些查詢所影響的行數。所以您需要使用存儲過程而不是單個查詢。