2009-11-11 75 views
1

在我的网站上,我使用简单的文件管理。用户可以上传文件,查看列表并删除它们。在数据库中我有一个表Files其中包含有关文件的信息(文件名,说明,插入日期)。从表中删除行时删除文件

我使用SQLDataSource显示GridView控件中的所有文件。

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

我想要做的就是当用户从表中删除行时,删除这个被取消的文件。我试图在OnDeleting事件中这样做,但它接缝,我必须执行另一个SELECT获取文件名。这是唯一的方法吗?或者还有其他更好的方法吗?或者如何从OnDeleting事件中获取文件名?

编辑: Databse是SQL Server,但在这种情况下并不重要。我将文件存储在文件系统中。在数据库中只有文件的名称。

回答

1

如果您从GridView.RowDeleting事件中尝试此操作,则可以使用传入参数GridViewDeleteEventArgs来获取要删除的行。假设该名称在该行中,则可以使用它来删除该文件。

0

你需要一些方法来交叉引用表项与文件 - 大概他们都有一个唯一的文件名?如果是这样,您可以使用它从您的代码中的相同位置删除文件 - 只需发出DB删除命令即可。

+0

我有文件名在表中。但问题是如何从OnDelete事件中获取文件名?我应该调用SELECT还是有任何允许获取所有受影响的行的机制(如SQL Server中的触发器中的表DELETED)。 – 2009-11-11 19:40:53

0

卢卡斯,

如果您使用的是GridView控件绑定数据,你可以定义的DataKeyNames属性,然后在RowDeleting事件执行以下操作:

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

我知道他们可以避邪,但这似乎是一个可以使用触发器的地方,这样,如果删除查询从多个位置运行,文件仍然会被删除。

如果是MS SQL

DECLARE @Command VARCHAR(8000)
SELECT @Command = '德尔C:\' +的DocID已删除
xp_cmdshell的@Command

2

而不是在删除行直接创建一个叫做deleteFile(@ID int)的存储过程。在这个proc里面,得到文件名:

Select FileName From Files Where ID = @ID 

然后删除文件起诉你用来删除实际文件的任何方法。

然后删除该行

Delete Files Where ID = @ID