2009-11-11 3 views
1

На моем веб-сайте я использую простое управление файлами. Пользователь может загружать файлы, просматривать список и удалять их. В базе данных у меня есть одна таблица Files, которая содержит информацию о файлах (имя файла, описание, дата вставки).Удалить файл при удалении строки из таблицы

Я показываю все файлы в GridView с SQLDataSource.

DeleteCommand="DELETE FROM Files WHERE id = @id" 

Что я хочу сделать, это удалить связанный файл, когда пользователь удаляет строку из таблицы. Я пытался сделать это в событии OnDeleting, но он швы, что я должен выполнить еще один SELECT, чтобы получить имя файла. Это единственный способ сделать это? Или это лучший способ? Или как получить имя файла изнутри события OnDeleting?

EDITED: Databse - это SQL Server, но в данном случае это не важно. Я храню файлы в файловой системе. В базе данных есть только имена файлов.

ответ

1

Если вы попробуете это из события GridView.RowDeleting, вы можете использовать переданный параметр GridViewDeleteEventArgs, чтобы получить строку, подлежащую удалению. Предполагая, что имя находится в этой строке, вы можете использовать его для удаления файла.

0

Вам нужно каким-то образом перекрестно ссылаться на запись в таблице с файлом - по-видимому, у обоих есть уникальное имя файла? Если это так, вы можете использовать это, чтобы удалить файл из того же места в коде, что вы делаете команду удаления DB.

+0

У меня есть имя файла в таблице. Но вопрос в том, как получить имя файла внутри события OnDelete? Должен ли я вызывать SELECT или есть какой-либо механизм, который позволяет получить все затронутые строки (например, DELETED таблицы внутри триггера в SQL Server). –

0

Лукаш,

Если вы используете Gridview для связывания данных, вы можете определить атрибут DataKeyNames, а затем в случае RowDeleting сделайте следующее:

string documentName = (string)GridName.DataKeys[e.RowIndex].Value; 
DeleteDoc(documentName); 
1

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

если MS SQL

DECLARE @command VARCHAR (8000)
ВЫБРАТЬ @command = 'дель C: \' + DocID ОТ удалён
xp_cmdshell @command

2

Вместо того, чтобы удалить свою строку непосредственно создайте хранимую процедуру, называемую deleteFile (@ID int). Внутри этой процедуры получите имя файла:

Select FileName From Files Where ID = @ID 

Затем удалите строку

Delete Files Where ID = @ID 
Смежные вопросы