我创建了一个使用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/ –