1

私のウェブサイトでは、単純なファイル管理を使用しています。ユーザーはファイルをアップロードし、リストを表示して削除できます。データベースにはFiles、ファイルに関する情報 (ファイル名、説明、挿入日) を含むテーブルが 1 つあります。

GridViewで管理しているすべてのファイルを表示しますSQLDataSource

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

私がしたいのは、ユーザーがテーブルから行を削除したときに関連ファイルを削除することです。OnDeletingイベントでこれを実行しようとしていましたがSELECT、ファイル名を取得するには別のファイルを実行する必要があるようです。これを行う唯一の方法ですか?それとも他の良い方法がありますか?OnDeletingまたは、イベント内からファイル名を取得する方法は?

EDITED:データベースは SQL Server ですが、この場合は重要ではありません。ファイルシステムにファイルを保存します。データベースにはファイルの名前しかありません。

4

5 に答える 5

2

行を直接削除するのではなく、deleteFile(@ID int) のような名前のストアド プロシージャを作成します。このプロシージャ内で、ファイル名を取得します。

Select FileName From Files Where ID = @ID

次に、実際のファイルを削除するために使用している方法を使用してファイルを削除します。

次に、行を削除します

Delete Files Where ID = @ID
于 2009-11-11T19:52:46.893 に答える
1

GridView.RowDeleting イベントからこれを試みると、渡されたパラメーター GridViewDeleteEventArgs を使用して、削除しようとしている行を取得できます。名前がこの行にあると仮定すると、それを使用してファイルを削除できます。

于 2009-11-11T19:35:18.617 に答える
1

それらが悪になる可能性があることは知っていますが、これはトリガーを使用できる場所のようです。そのように、削除クエリが複数の場所から実行された場合でも、ファイルは削除されます。

MS SQL の場合

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

于 2009-11-11T19:44:56.820 に答える
0

テーブル エントリとファイルを相互参照する方法が必要です。おそらく、両方とも一意のファイル名を持っているのでしょうか? その場合、それを使用して、分離コード内の DB 削除コマンドを発行しているのと同じ場所からファイルを削除できます。

于 2009-11-11T19:34:59.707 に答える
0

ルカシュ、

Gridview を使用してデータをバインドしている場合は、DataKeyNames 属性を定義してから、RowDeleting イベントで次の操作を実行できます。

string documentName = (string)GridName.DataKeys[e.RowIndex].Value;
DeleteDoc(documentName);
于 2009-11-11T19:39:50.637 に答える