Я работаю над приложением 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++, что позволяет использовать существующие библиотеки.
Попробуйте изменить это
В 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())