2009-11-11 4 views
1

Sur mon site Web, j'utilise la gestion de fichiers simple. L'utilisateur peut télécharger des fichiers, voir la liste et les supprimer. Dans la base de données, j'ai un tableau Files qui contient des informations sur les fichiers (nom de fichier, description, insérer la date).Supprimer le fichier lors de la suppression d'une ligne du tableau

Je montre tous les fichiers dans GridView contrôle avec SQLDataSource.

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

Ce que je veux faire est de supprimer le fichier asocciated lorsque l'utilisateur supprime la ligne de la table. J'essayais de le faire dans OnDeleting événement mais il semble que je dois exécuter un autre SELECT pour obtenir le nom de fichier. Est-ce le seul moyen de le faire? Ou est-ce un autre moyen? Ou comment obtenir le nom de fichier à partir de l'événement OnDeleting?

EDITED: La base de données est SQL Server, mais ce n'est pas important dans ce cas. Je stocke les fichiers dans le système de fichiers. Dans la base de données, il n'y a que des noms de fichiers.

Répondre

1

Si vous essayez ceci à partir de l'événement GridView.RowDeleting, vous pouvez utiliser le paramètre transmis GridViewDeleteEventArgs pour obtenir la suppression de la ligne. En supposant que le nom figure dans cette ligne, vous pouvez l'utiliser pour supprimer le fichier.

0

Vous avez besoin d'un moyen de faire une référence croisée de l'entrée de la table avec le fichier - sans doute les deux ont-ils un nom de fichier unique? Si c'est le cas, vous pouvez l'utiliser pour supprimer le fichier au même endroit dans votre code-behind que vous êtes en train d'exécuter la commande DB delete.

+0

Je nom de fichier dans la table. Mais la question est de savoir comment obtenir le nom de fichier à partir de l'événement OnDelete? Dois-je appeler SELECT ou existe-t-il un mécanisme qui permet d'obtenir toutes les lignes affectées (comme la table DELETED à l'intérieur du déclencheur dans SQL Server). –

0

Lukasz,

Si vous utilisez un Gridview pour lier les données, vous pouvez définir les DataKeyNames attribut et puis en cas de RowDeleting procédez comme suit:

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

Je sais qu'ils peuvent être mal , mais cela semble être un endroit où les déclencheurs pourraient être utilisés, de cette façon, si la requête de suppression est exécutée à partir de plusieurs endroits, le fichier serait toujours supprimé.

si elle est MS SQL

DECLARE @Command varchar (8000)
SELECT @Command = 'del c: \' + DocID DE Deleted
xp_cmdshell @Command

2

Plutôt que de supprimer votre ligne directement, créez une procédure stockée appelée quelque chose comme deleteFile (@ID int). Dans ce proc, obtenir le nom de fichier:

Select FileName From Files Where ID = @ID 

Supprimez ensuite le fichier quelle que soit la méthode que vous poursuit vous utilisez pour supprimer des fichiers réels.

Ensuite, supprimez la ligne

Delete Files Where ID = @ID 
Questions connexes