#asp.net #sql
#asp.net #sql
Вопрос:
У меня настроен веб-портал, где клиенты могут добавлять контакты компании и т. Д. В базу данных sql Через просмотры сетки и подробные представления, которые я создал с помощью Microsoft Web Developer. Мне нужно настроить его так, чтобы, хотя клиенты, имеющие права, могли редактировать и удалять записи контактов, они не могли удалить последнюю. В системе должен быть один оставшийся. Я знаю, это звучит как странный запрос, но он необходим. Это можно сделать через VB, SQL или через один из объектов веб-разработчиков, таких как представление сведений?
Спасибо!
Комментарии:
1. Что вы подразумеваете под «последней строкой»? За исключением некоторых СУБД, базы данных в целом, как правило, не заботятся о порядке строк в какой-либо конкретной таблице, если вы не сообщите им об этом (через
order by
предложение).2. Прошу прощения. Это не обязательно должна быть последняя строка, мне просто нужно настроить ее так, чтобы в таблице оставалась одна запись. Какой бы он ни был.
3. Итак, вам все равно, какая строка остается, если в таблице есть хотя бы одна строка?
4. На вашем месте я бы немного поработал над этой темой. Это очень сложно понять.
5. Вы совершенно правы. Я сделаю это сейчас. И это правильно. В таблице должна остаться хотя бы одна строка.
Ответ №1:
Не странный запрос, насколько я понимаю необходимость. Решение, которое мы использовали, заключается в том, что фактическая учетная запись администратора по умолчанию не отображалась в списке удаления, поскольку она была «сгенерирована системой». Это может быть не переоснащение, которое вы можете выполнить.
Чего вы не можете сделать, так это использовать автоматическое перетаскивание мусора и установить этот тип функциональности. Вам нужно будет либо выполнить запрос, чтобы удалить последний запрошенный элемент, написать триггер в базе данных, либо написать пользовательский код, чтобы не удалять последний элемент.
В качестве примера сопряжения: с datasets, поскольку они отключены, вы можете удалить последнюю строку перед отправкой запроса на удаление. С LINQ и EF у вас есть аналогичные параметры для формирования возвращаемых данных.
Затем, если вы хотите явно управлять своим кодом (хорошо), вы можете просмотреть элементы и убедиться, что последний не удаляется.
Если вы хотите сделать это как можно более «безопасным», вы можете рассмотреть триггер в таблице, который проверяет, является ли удаление последним пользователем администратора для конкретной организации, и прервать, если это так. Тогда пользователь может сказать «удалить все» в Интернете, но база данных защищает их.
Комментарии:
1. Много хороших предложений. Спасибо. Я приму эти предложения и попытаюсь создать нужный мне код. Я могу попробовать посмотреть, как создать триггер, как вы предложили.
2. Триггер — это немного больше работы и не такой «удобный для пользователя», особенно если пользователь хочет удалить все по какой-то глупой причине. Но это добавляет уровень безопасности на самом глубоком уровне.