2016-07-18 4 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

어느 쪽이든 당신은 당신이 단정를 사용하여 데이터베이스에서 단일 값을 검색 할 수 있습니다 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) 
관련 문제