如何使用Dapper从数据库中检索单个值
本文关键字:检索 单个值 数据库 何使用 Dapper | 更新日期: 2023-09-27 17:57:28
我正在使用Dapper,并试图从数据库中检索一个short,并且希望在不从集合中获取它的情况下完成此操作。
我得到了以下代码,它不起作用,因为QueryAsync<short>
返回IEnumerable<short>
。
short status;
using (var sqlConnection = new SqlConnection(connectionString))
{
var parameters = new DynamicParameters();
parameters.Add("@ID", ID, DbType.Int32, ParameterDirection.Input);
await sqlConnection.OpenAsync();
status = await sqlConnection.QueryAsync<short>("SELECT [StatusID] FROM [MyTable] WHERE [ID] = @ID", parameters, commandTimeout: _sqlCommandTimeoutInSeconds);
}
我可以让Dapper返回一个值而不是一个集合吗?
FYI,Dapper现在添加了QuerySingle
和QuerySingleAsync
以及它们相应的OrDefault
变体。。。QuerySingleOrDefaultAsync
的用法是:
await connection.QuerySingleOrDefaultAsync<short>(sql);
您可以使用ExecuteScalarAsync
或Single()
使用ExecuteScalarAsync
,您可以使用Dapper从数据库中检索单个值。
short status;
using (var sqlConnection = new SqlConnection(connectionString))
{
var parameters = new DynamicParameters();
parameters.Add("@ID", ID, DbType.Int32, ParameterDirection.Input);
await sqlConnection.OpenAsync();
status = await sqlConnection.ExecuteScalarAsync<short>("SELECT [StatusID] FROM [MyTable] WHERE [ID] = @ID", parameters, commandTimeout: _sqlCommandTimeoutInSeconds);
}
Single()
可以用这种方式
short status;
using (var sqlConnection = new SqlConnection(connectionString))
{
var parameters = new DynamicParameters();
parameters.Add("@ID", ID, DbType.Int32, ParameterDirection.Input);
await sqlConnection.OpenAsync();
status = await sqlConnection.QueryAsync<short>("SELECT [StatusID] FROM [MyTable] WHERE [ID] = @ID", parameters, commandTimeout: _sqlCommandTimeoutInSeconds).Single();
}
您应该使用ExecuteScalar
:
status = await sqlConnection.ExecuteScalarAsync<short>("SELECT [StatusID] FROM [MyTable] WHERE [ID] = @ID", parameters, commandTimeout: _sqlCommandTimeoutInSeconds)