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

Nic*_*las 8 .net c# sql-server asp.net-mvc dapper

我正在使用Dapper并尝试从数据库中检索一个短片,并希望在不从集合中抓取它的情况下执行此操作.

我有以下代码,因为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);
}
Run Code Online (Sandbox Code Playgroud)

我可以让Dapper返回单个值而不是集合吗?

Dav*_*dro 14

仅供参考,小巧玲珑现在又增加两个QuerySingleQuerySingleAsync以及其相应的OrDefault变体......使用情况QuerySingleOrDefaultAsync是:

await connection.QuerySingleOrDefaultAsync<short>(sql);
Run Code Online (Sandbox Code Playgroud)


Aft*_*med 12

要么你可以使用ExecuteScalarAsyncSingle()ExecuteScalarAsync您可以用小巧玲珑的从数据库中检索单个值.

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);
}
Run Code Online (Sandbox Code Playgroud)

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();
}
Run Code Online (Sandbox Code Playgroud)

  • 您现在也可以使用“QuerySingle”。 (2认同)