sql server 2008 -操作数类型冲突:int与唯一标识符不兼容

本文关键字:int 唯一 标识符 不兼容 冲突 2008 server 操作数 类型 sql | 更新日期: 2023-09-27 17:50:49

我在stackoverflow上尝试了许多解决方案,但没有一个给我一个解决方案,我有以下查询,它传递了三个参数

  using (var sqlCon = new SqlConnection(Database.ReturnDatabaseConnection()))
   {
     var p = new DynamicParameters();
     p.Add("@EmailAddress", emailAddress);
     p.Add("@UserId", SqlDbType.BigInt, direction: ParameterDirection.InputOutput);
     p.Add("@UniqueId", SqlDbType.UniqueIdentifier, direction: ParameterDirection.InputOutput);
     var t = sqlCon.Execute("RequestPasswordReset", p, commandType: CommandType.StoredProcedure);
     var b = p.Get<Int64>("@UserId");
     var c = p.Get<Guid>("@UniqueId");
    }

调用以下存储过程

ALTER PROCEDURE RequestPasswordReset
@EmailAddress varchar(320),
@UserId bigint output,
@UniqueId UniqueIdentifier output
AS
BEGIN
SET NOCOUNT ON;
SET @UserId = (Select ISNULL(Id, NULL) from [User].[User_Profile] where EmailAddress = @EmailAddress and ProfileStatus <> 5)
IF @UserId is not null 
BEGIN 
       SET @UniqueId = NEWID()    
       INSERT INTO [Reset].[PasswordReset] 
              (UserId, UniqueId, 
               DateRequested, DateCompleted)
       VALUES 
              (@UserId, @UniqueId, SYSDATETIME(), NULL)

END  

如果用户存在,我将返回userId (bigint)和uniqueId (UniqueIdentifier)

当我到达c#项目

中的以下行时
sqlCon.Execute("RequestPasswordReset", p, commandType: CommandType.StoredProcedure);

我得到这个问题的标题写的错误信息,有人能解释一下我在这里做错了什么吗?

表结构如下:

CREATE TABLE [Reset].[PasswordReset](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[UserId] [bigint] NOT NULL,
[UniqueId] [uniqueidentifier] NOT NULL,
[DateRequested] [datetime] NOT NULL,
[DateCompleted] [datetime] NULL,
CONSTRAINT [PK_Reset]].[PasswordReset] PRIMARY KEY CLUSTERED 
(
[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

用户配置文件表

CREATE TABLE [User].[User_Profile](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[UniqueId] [uniqueidentifier] NOT NULL,
[Username] [varchar](25) NOT NULL,
[EmailAddress] [varchar](320) NOT NULL,
[Password] [varchar](200) NOT NULL,
[ProfileStatus] [int] NOT NULL,
CONSTRAINT [PK_User.User_Profile] PRIMARY KEY CLUSTERED 
(
[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

sql server 2008 -操作数类型冲突:int与唯一标识符不兼容

我也遇到了同样的问题。试试这个。它解决了我的问题。

p.Add("@UserId",null,dbType: DbType.BigInt, direction: ParameterDirection.Output);
p.Add("@UniqueId",null,dbType: DbType.Guid, direction: ParameterDirection.Output,size:40);

我猜Add方法期望值作为第二个参数,在输出作为参数的情况下。