2016-09-22 98 views
2

我有一个两张桌子,一张带有所有图片(叫做billeder,它的丹麦语),它们有外键(在我的代码中称为“专辑”),它告诉巫婆专辑它属于,然后我有专辑,与主键(alb_id)。所以我可以评估特定专辑中的图片。如何删除具有相同相册ID的所有图像文件?

我知道如何删除表中和服务器上的文件夹中的图片。这工作正常。

但我需要知道如何一次删除文件夹中的所有图片。

我有这个至今:

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connectionstring"].ToString()); 

    SqlCommand cmd = new SqlCommand(); 

    cmd.Connection = conn; 


    cmd.CommandText = "DELETE FROM albums WHERE alb_id = @id"; 
    cmd.Parameters.AddWithValue("@id", id); 

    conn.Open(); // Open the connection 
    cmd.ExecuteNonQuery(); 
    conn.Close(); 

    cmd.CommandText = "DELETE FROM billeder WHERE album = @id"; 
    cmd.Parameters.AddWithValue("@id", id); 

    conn.Open(); // Open the connection 
    cmd.ExecuteNonQuery(); 
    conn.Close(); 

代码中,我有删除文件:

File.Delete(Server.MapPath("../fotos/" + image)); 
+0

'但我需要知道如何一次性删除文件夹中的所有图片,为什么?删除他们一个接一个...... –

+0

这对使用我的页面的用户不是很友好:)我希望有一个解决方案, –

+1

@SeanCox - 她正在使用参数化的SQL命令。 SQL注入不应该是一个担心。但是,她应该使用'using'语句来封装她的连接和命令以防止内存和性能问题。 – Icemanind

回答

1

鉴于你在billeder表图片的路径,你可以查询他们你从表中删除的行之前:

cmd.CommandText = "select imagePath FROM billeder WHERE album = @id"; 
var result = cmd.ExecuteQuery(); 

然后遍历结果集依次删除每个图像:

foreach (var image in result) // assuming the result set is a list of strings 
{ 
    File.Delete(Server.MapPath("../fotos/" + image)); 
} 

更好的解决方案是将图像放入每个相册的文件夹中(或者使用相册ID,或者更好的方法是将GUID作为文件夹的名称,然后您可以用一次调用删除该文件夹。

+0

谢谢,我想我会制作文件夹,但这仍然很好地知道我的想法。再次感谢。 –

0

编辑:更新我的关于如何创建每张专辑目录并删除它的答案,请注意:albumId必须是唯一的

创建每个相册的目录

var path = Server.MapPath("../fotos/") + albumId; 

CreateDirectory(path); 

删除相册目录

Directory.Delete(path , true); 
+1

您确定该文件夹仅包含**该相册的文件吗? –

+0

从O,P“但我需要知道如何一次删除文件夹中的所有图片。” –

+1

但是我仍然把它看作是*“一次删除文件夹中的所有图片(*)”* –

相关问题