Jon*_*ood 0 t-sql sql-server ado.net
我创建了一个用uniqueidentifier作主键的SQL Server表.我将默认值或绑定设置为newid().(我想为此列设置标识规范,但uniqueidentifier类型不支持.)
然后我使用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();
Run Code Online (Sandbox Code Playgroud)
但是,最后一行因为ExecuteScaler()返回而失败null.看来,由于a uniqueidentifier不能是表的标识,因此SCOPE_IDENTITY()返回null(如同@@IDENTITY).
好的,还有另一种方法可以使用ADO.NET检索新添加的ID吗?
SCOPE_IDENTITY()仅用于标识值,对于需要将OUTPUT子句与表变量一起使用的guid值.
DECLARE @NewGuid TABLE(NewValue UNIQUEIDENTIFIER);
INSERT INTO [User] (Name)
OUTPUT inserted.pk_ColName INTO @NewGuid(NewValue)
VALUES (@name);
SELECT * FROM @NewGuid --<-- here you will have the new GUID Value
Run Code Online (Sandbox Code Playgroud)
C#代码看起来像......
string cmd = "DECLARE @NewGuid TABLE(NewValue UNIQUEIDENTIFIER);
INSERT INTO [User] (Name)
OUTPUT inserted.pk_ColName INTO @NewGuid(NewValue)
VALUES (@name);
SELECT @newID = NewValue FROM @NewGuid;"
SqlCommand command = new SqlCommand(cmd, Connection);
cmd.Parameters.AddWithValue("@name", "Joe Smoe");
cmd.Parameters.Add("@newID", SqlDbType.UniqueIdentifier).Direction = ParameterDirection.Output;
Guid userId = (Guid)cmd.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)
我个人会将整个事情放在存储过程中.
| 归档时间: |
|
| 查看次数: |
1682 次 |
| 最近记录: |