我創建了一個使用uniqueidentifier
作爲主鍵的SQL Server表。我將默認值或綁定設置爲newid()
。 (我想爲此列設置標識規範,但不支持uniqueidentifier
類型。)當ID是唯一標識符時返回新行的ID
然後我使用ADO.NET向此表中添加一行。
SqlComment command = new SqlCommand("INSERT INTO [User] (Name) VALUES (@name);
SELECT SCOPE_IDENTITY()", Connection);
command.Parameters.AddWithValue("@name", "Joe Smoe");
Guid userId = (Guid)command.ExecuteScalar();
然而,在最後一行失敗,因爲ExecuteScaler()
回報null
。看起來,由於uniqueidentifier
不能是該表的標識,SCOPE_IDENTITY()
返回null
(與@@IDENTITY
一樣)。
好的,那麼還有另一種方法來使用ADO.NET檢索新添加的ID嗎?
這是因爲SCOPE_IDENTITY返回最後插入的IDENTITY值。你的表沒有標識,所以NULL是唯一可以返回的東西。 Guid已經變得如此流行的一個原因是因爲你可以在你的代碼中定義它並將它傳遞給sql server。我當然希望如果這是你的主鍵,它不是聚集索引。你也可以看看這篇文章。 http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/ –