Я не могу удалить пользователя

Я работаю над приложением CRUD в Blazor и получил ошибку при выполнении функции удаления пользователя. Я пробовал много способов, но потерпел неудачу. Вот код в моих 3 файлах.

ДАО.cs

public void DeleteUser(List<int> userIds)
        {
            string deleteQuery = "DELETE FROM Users WHERE UserID IN (@userIds)";
            Dictionary<string, object> delParams = new Dictionary<string, object> {
                { "@userIds", userIds } 
            };
            sqlManager.ExecuteNonQuery(deleteQuery, delParams);
        }

Сервис.cs

public void DeleteUsers(List<int> userIds)
        {
            dao.DeleteUser(userIds);
        }

Пользователь.razor

private List<Users> selectedUsers = new List<Users>();

    private async Task DeleteUser()
    {
        List<int> userIds = selectedUsers.Select(u => u.UserID).ToList();
        service.DeleteUsers(userIds);
        NavigationManager.NavigateTo("/User", forceLoad: true);
    }

Я не могу удалить пользователя и эта ошибка:

введите сюда описание изображения

Как исправить эту ошибку

🤔 А знаете ли вы, что...
C# поддерживает интероперабельность с кодом, написанным на C++, что позволяет использовать существующие библиотеки.


74
1

Ответ:

Решено

Попробуйте изменить это

В Service.cs

public void DeleteUsers(params int[] userIds)
{
    dao.DeleteUser(userIds);
}

с этим изменением вы передаете список идентификаторов пользователей на уровень DAO. Вам нужно передать его как массив параметров, а не как список.

В DAO.cs:

public void DeleteUser(params int[] userIds)
{
    string deleteQuery = "DELETE FROM Users WHERE UserID IN (" + string.Join(",", userIds) + ")";
    sqlManager.ExecuteNonQuery(deleteQuery);
}

Вам нужно изменить способ выполнения запроса sql для разрешения нескольких параметров.

В методе частной асинхронной задачи DeleteUser() измените способ передачи параметра, Convert toList

service.DeleteUsers(userIds.ToArray())