我在我的项目中使用ASP NET核心,使用Dapper ORM和PostgreSQL作为数据库。我想检查数据库中是否存在具有特定UUID(C#中的GUID)值的用户。下面是我的代码检查相同:
public async Task<bool> DoesRecordExistAsync(Guid columnValue)
{
bool doesRecordExist;
doesRecordExist = await _connection.ExecuteScalarAsync<bool>("SELECT * FROM employee_master WHERE employee_id = @columnValue;", new { columnValue });
return doesRecordExist;
}
注意:_connection是IDbconnection示例。
在执行该语句时,我得到以下错误:
对象必须实现IConvertible。
上面的代码有什么问题吗?
2条答案
按热度按时间blmhpbnm1#
您的查询“
SELECT * FROM ....
“从数据库返回匹配的行;不是你所期待的bool
。ExecuteScalar
将返回第一行的第一列。不能保证 that 列总是布尔值;基本上,你也不需要该列的值。查询应该是类似于
select exists(select 1 from...
的内容,正如here所解释的那样。它将返回
true
/false
,然后您可以使用await _connection.ExecuteScalarAsync<bool>(......
进行处理。所以,新代码变成:
或者(slow;不推荐),您应该将查询更改为
SELECT COUNT(*) FROM ...
以获取记录计数。阅读更多关于优化here。然后你可以将其转换为
bool
,如下所示:lbsnaicq2#
尝试使用下一个查询: