Dapper:不允许从数据类型datetime到int的隐式转换。使用CONVERT函数运行此查询

问题描述 投票:0回答:1

我有此查询用于将用户插入数据库:

INSERT INTO [User] 
OUTPUT inserted.Id 
VALUES (@IsDelete, @FirstName, @LastName, @UserName, @Email, @Birthdate, @IsActive, @Password, @SecurityStamp, @Gender, @ActivetionCode, @ActivationCodeExpireDateTime)

这是我的模特:

User user = new User();
user.Email = request.Email;
user.IsDelete = false;
user.IsActive = false;
user.Birthdate = DateTime.UtcNow;
user.FirstName = "user" + DateTime.Now.Millisecond;
user.LastName = "failmy" + DateTime.Now.Millisecond;
user.Password = request.Password;
user.UserName = request.UserName;
user.Gender = GenderEnum.Male;
user.SecurityStamp = Guid.NewGuid();
user.ActivetionCode = code;
user.ActivationCodeExpireDateTime = DateTime.UtcNow;

我在这里用这个:

var role = roleConnection.Query<int>(Command, Model);

但我收到此错误:

不允许从数据类型datetime到int的隐式转换。使用CONVERT函数运行此查询。

有什么问题?我该如何解决?

c# sql-server asp.net-core sql-insert dapper
1个回答
1
投票

如所评论:您的值列表和列列表之间可能不匹配,最终导致将值写入到不属于该列的列中。

您正在使用未列出目标列的插入语法:

insert into [User] output inserted.Id values(val1, val2, ...)

这容易出错,当出现问题时很难调试。相反,您应该在插入查询中枚举列:

insert into [User](col1, col2, ...) output inserted.Id values(val1, val2, ...)) 

使用此语法可以更轻松地检查列和值是否匹配。

© www.soinside.com 2019 - 2024. All rights reserved.