如何使用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返回一个值而不是一个集合吗?

如何使用Dapper从数据库中检索单个值

FYI,Dapper现在添加了QuerySingleQuerySingleAsync以及它们相应的OrDefault变体。。。QuerySingleOrDefaultAsync的用法是:

await connection.QuerySingleOrDefaultAsync<short>(sql);

您可以使用ExecuteScalarAsyncSingle()使用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)