как ждать логического ответа от метода, который выполняет запрос SQLite - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть служба, которая выполняет различные запросы к моей локальной базе данных SQLite (DATASERVICE.CS), но в этой службе я хочу выполнить метод, который удаляет все записи таблицы и, если он это сделал успешно, возвращаетистина, и если он не мог этого сделать, вернуть ложь.

DATASERVICE.CS:

 public async Task<bool> DeleteAllUser()
 {
        var queryUser = await this.connection.ExecuteAsync("delete from [UserLocal]");

        if (queryUser == true)
        {
             return true;
        }
        else
        {
             return false;
        }
 }

function

Проблема в том, чтовозникает то, что этот метод возвращает целое число, иногда это 1, а иногда это 0 (я не понимаю, почему это поведение)

1 0

Как сделать так, чтобы эта функция возвращала логическое значение?Я правильно использую ExecuteAsync?Должен ли я использовать QueryAsync?любая помощь для меня?

Ответы [ 3 ]

2 голосов
/ 03 апреля 2019

Как взято из документации прямо в коде там написано

/// <returns> 
/// The number of rows added to the table.
/// </returns>

Итак, в вашем примере это означает, что 0 или 1 строка удалена.Чтобы превратить это в логическое значение, лучшее, что вы можете сделать, - это обернуть его в метод и позволить вернуть логическое значение.Или просто перехватите результат в переменной и убедитесь, что он больше 0.

2 голосов
/ 03 апреля 2019
  1. Вы, вероятно, используете Dapper, потому что IDbConnection не имеет ExecuteAsync () и QueryAsync ().Это будет хорошо, когда мы расскажем в следующий раз.
  2. Query () и QueryAsync () предназначены для SELECT.
  3. Число, которое возвращает Execute, - это число затронутых строк - если в таблице 2 строкии вы звоните DELETE FROM TABLE, вы получаете номер 2.

Итак, вы можете написать что-то вроде этого:

public async Task<bool> DeleteAllUser()
{
    try
    {
        var queryUser = await this.connection.ExecuteAsync("delete from [UserLocal]");
        return true;
    }
    catch(Excpection e)
    {
        // log e
        return false;
    }
    finally
    {
        connection?.Close();
    }
}
1 голос
/ 03 апреля 2019

SQL Delete возвращает количество затронутых строк.Так что, если он возвращает 0, вы удалили 0 пользователей.В обоих случаях операция прошла успешно.Если что-то пойдет не так, это вызовет исключение.Так что это зависит от того, что вы считаете успехом или провалом.Если вы хотите вернуть false, если ни один из пользователей не был удален, вы можете сделать это:

 public async Task<bool> DeleteAllUser()
 {
        var amountOfAffectedRows = await this.connection.ExecuteAsync("delete from [UserLocal]");

        if (amountOfAffectedRows > 0)
        {
             return true;
        }

        return false;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...