我有此查询用于将用户插入数据库:
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函数运行此查询。
出什么问题了?我该怎么解决?
答案 0 :(得分:2)
如前所述:您的值列表和列列表之间可能不匹配,最终导致将值写入到不属于该列的列中。
您使用的插入语法未列出目标列:
insert into [User] output inserted.Id values(val1, val2, ...)
这很容易出错,当出现问题时很难调试。相反,您应该在插入查询中枚举列:
insert into [User](col1, col2, ...) output inserted.Id values(val1, val2, ...))
使用此语法可以更轻松地检查列和值是否匹配。