Я работаю над приложением 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);
}
Я не могу удалить пользователя и эта ошибка:
введите сюда описание изображения
Как исправить эту ошибку
Если вы используете Dapper, я считаю, что синтаксис расширения IN до списка идентификаторов заключается в том, чтобы не заключать список в круглые скобки, т. е. Dapper ожидает Execute("DELETE FROM x WHERE id IN @listOfIds", new{ @listOfIds = your_list_here } ). Если вы не используете dapper, либо используйте его, либо вручную разверните эти идентификаторы в список параметров, либо используйте временную таблицу, либо...





Попробуйте изменить это
В 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())
Когда вы задали свой вопрос, вам сказали: «Пожалуйста, обязательно публикуйте код и ошибки в виде текста непосредственно к вопросу (и , а не в виде изображений ) и отформатируйте их соответствующим образом». Пожалуйста, следуйте инструкциям при публикации своих вопросов, так как в противном случае вы, скорее всего, получите отрицательные и/или закрытые голоса; это означает, что на ваш вопрос гораздо меньше шансов получить ответ.