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

时间:2019-10-27 20:08:44

标签: c# sql-server asp.net-core sql-insert dapper

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

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函数运行此查询。

出什么问题了?我该怎么解决?

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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