gpt4 book ai didi

c# - Scope_Identity 不能在 c# 上使用 GUID

转载 作者:搜寻专家 更新时间:2023-10-30 22:00:28 24 4
gpt4 key购买 nike

我一直在尝试在数据库中插入一些数据,同时获取标识符。

标识符类型是 Guid。

我已经尝试了一些解决方案。

我正在搜索,但我找不到任何与 C# 中的 Guid 一起工作的东西。

我最后试的是这样的:

        dbAccess db = new dbAccess();
SqlConnection con = db.openConnection();
Guid retVal = Guid.Empty;
try
{
SqlCommand cmd = new SqlCommand(@"insert into Comment(IdDiscussion,UserId,Description,DateTime)
values(@IdDiscussion,@UserId,@description,@dateTime);
set @ret=SCOPE_IDENTITY();", con);
cmd.Parameters.AddWithValue("@IdDiscussion", discussionId);
cmd.Parameters.AddWithValue("@UserId", userId);
cmd.Parameters.AddWithValue("@description", comment);
cmd.Parameters.AddWithValue("@dateTime", dateTime);
SqlParameter retParameter = new SqlParameter("@ret", SqlDbType.UniqueIdentifier);
retParameter.Direction = ParameterDirection.Output;
cmd.Parameters.Add(retParameter);
cmd.ExecuteNonQuery();
retVal = (Guid)retParameter.Value;
}
catch (Exception e)
{
//doesn't really matter
}
db.closeConnection();
return retVal;

在这种情况下,我在 executeNonQuery() 上收到以下错误:“操作数类型冲突:数字与 uniqueidentifier 不兼容”

有什么可以帮助的建议吗?

最佳答案

scope_identity() 仅返回最后一个(作用域内的)标识值 - 此值数据类型必须是数字。

所以不幸的是,我想到的唯一修复方法是这样的:

declare @op table
(
ColGuid uniqueidentifier
)

insert into Comment(IdDiscussion,UserId,Description,DateTime)
output inserted.CommentId -- GUID column
into @op
values (@IdDiscussion,@UserId,@description,@dateTime)

select top 1 o.ColGuid
from @op o

然后在您的代码中:

var guid = (Guid)cmd.ExecuteScalar();

再提一下:这个解决方案应该适用于 SQL Server 2005 及更高版本

关于c# - Scope_Identity 不能在 c# 上使用 GUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17187723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com