3

我正在使用Microsoft Visual Studio Express 2012用於Web開發MVC5應用程序。我想通過使用Dapper dot net得到最後插入的ID。我在這裏得到了解決方案,但他們正在研究SQL Server 2012(Management Studio),但是當我在代碼中運行查詢時,返回值是錯誤的。這裏是我已經嘗試過的代碼片段,以便最後插入ID使用Dapper Dot Net獲取最後插入的ID

SqlConnection _db = new SqlConnection("String"); 

     string query_1 = @"DECLARE @InsertedRows AS TABLE (user_id int);Insert into users (stuff) OUTPUT Inserted.user_id INTO @InsertedRows values(@stuff); SELECT user_id FROM @InsertedRows"; 
     string query_2 = @"Insert into users (stuff) OUTPUT Inserted.user_id values(@stuff);"; 
     string query_3 = @"Insert into users (stuff) values(@stuff); SELECT SCOPE_IDENTITY()"; 

     1. var id = _db.Query<int>(query_x, new { stuff = @stuff }); 
     2. var id = _db.Execute(query_x, new { stuff = @stuff }); 

但在兩種情況下ID的值都是1但不是實際結果。但是當我在SQL管理工作室上運行相同的查詢時,一切都還好。請幫助解決這個問題。

+0

'OUTPUT Inserted' **僅供參考,這可能比使用SCOPE_IDENTITY更慢,並在更新#5中修復爲SQL Server 2008 R2 Service Pack 1 ** – Kiquenet

回答

1

好吧,我要回答自己提出的問題,我得到了後,小巧玲瓏的,我們有一些其他的搜索接聽擴展方法.Single(),將返回我的情況下新增即

var id = _db.Query<int>(query_x, new { stuff = @stuff }).Single(); 

的Selectd價值的價值它會返回新添加的主鍵值的值。我只需添加.Single()函數即可獲得新增值。

0

我認爲這個問題是您正在使用SCOPE_IDENTITY() (的Docu在https://msdn.microsoft.com/en-us/library/ms190315.aspx: 返回同一範圍中插入到標識列的最後一個標識值作用域是一個模塊:一個存儲過程,觸發器,函數或批處理)

你可能想從IDENT_CURRENT() (的Docu在https://msdn.microsoft.com/en-us/library/ms175098.aspx結果: 返回指定表或視圖生成的最後一個標識值生成的最後一個標識值可以爲任何會議和任何範圍。)