Dapper Execute возвращает -1 значение? - PullRequest
0 голосов
/ 18 октября 2018

Следующий запрос SQL возвращает 1, когда заданные значения доступны, и 0, когда недоступны, и он отлично работает в SQL Server Management Studio,

select 
    case 
       when exists (select * from [dbo].[user] 
                    where userName = 'admin' 
                      and password = 'admin') 
          then cast(1 as bit) 
          else cast(0 as bit)
    end

Тот же запрос с более щадящим ORM следующий::

public int login(string userName, string password)
{
        string sql = "select case when exists(select * from user where userName = @usernamepara and password = @passwordpara) then cast(1 as bit) else cast(0 as bit )end";

        using(IDbConnection conn = dbConnection)
        {
            conn.Open();

            var res = conn.Execute(sql, 
                                   param: new { usernamepara = userName, 
                                                passwordpara = password });
            conn.Close();
            return res;
        }
    }

Но когда этот метод вызывается, он возвращает -1 для совпадающих и не совпадающих записей.Что здесь не так?

1 Ответ

0 голосов
/ 18 октября 2018

Возможно, потому что вы используете неправильный execute:

https://dapper -tutorial.net / execute

Говорит, что EXECUTE вернет количество затронутых строк,и этот документ проясняет, что execute не используется для запросов, которые возвращают строки

Я бы сказал, что вы должны использовать что-то в dapper, которое использует ExecuteScalar под капотом - см. есть ли ExecuteScalar вDapper , а также ссылка в моем комментарии на вопрос о том, как превратить запрос на подсчет (также предлагается в комментарии) в результат книги, где 0 равно false, а все остальное - true

...