2016-07-18 5 views
1

私はDapperを使用していて、データベースからshortを取得しようとしています。これをコレクションから取得せずに行いたいと思います。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); 
} 

Dapperにコレクションではなく単一の値が返されるようにすることはできますか?

答えて

3

あなたがDapperのを使用して、データベースから単一の値を取得することができExecuteScalarAsyncExecuteScalarAsyncまたは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.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(); 
} 
で使用することができます
0

あなたはExecuteScalarを使用する必要があります。

status = await sqlConnection.ExecuteScalarAsync<short>("SELECT [StatusID] FROM [MyTable] WHERE [ID] = @ID", parameters, commandTimeout: _sqlCommandTimeoutInSeconds) 
関連する問題