上傳圖片後,如果用GridView刪除資料庫路徑,但是又沒加寫刪除實體檔案,所以不會刪除到實體檔案,運用Arrary.Exists方法進行資料庫資料及實體資料陣列比對,比對後將沒有在資料庫內檔案進行刪除。
前端程式碼:
<asp:FileUpload
ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Send" />
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Default.aspx">HyperLink</asp:HyperLink>
<asp:Button ID="Button2" runat="server" Text="陣列清除" />
<asp:Button ID="Button3" runat="server" Text="BinarySearchDelete" />
</p>
<p>
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AllowSorting="True" AutoGenerateColumns="False" DataSourceID="sdDoc"
BackColor="White" BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px"
CellPadding="4" DataKeyNames="index">
<Columns>
<asp:CommandField ShowDeleteButton="True" />
<asp:BoundField DataField="index" HeaderText="index" InsertVisible="False"
ReadOnly="True" SortExpression="index" />
<asp:BoundField DataField="Url" HeaderText="Url" SortExpression="Url" />
<asp:TemplateField>
<ItemTemplate>
<asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl='<%# Eval("Url") %>'
Text='<%# Eval("Url") %>'></asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />
<PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" />
<RowStyle BackColor="White" ForeColor="#330099" />
<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" />
<SortedAscendingCellStyle BackColor="#FEFCEB" />
<SortedAscendingHeaderStyle BackColor="#AF0101" />
<SortedDescendingCellStyle BackColor="#F6F0C0" />
<SortedDescendingHeaderStyle BackColor="#7E0000" />
</asp:GridView>
<asp:SqlDataSource ID="sdDoc" runat="server"
ConnectionString="<%$ ConnectionStrings:DBTestConn %>"
DeleteCommand="DELETE FROM [T] WHERE [index] = @index"
InsertCommand="INSERT INTO [T] ([Url]) VALUES (@Url)"
SelectCommand="SELECT * FROM [T]"
UpdateCommand="UPDATE [T] SET [Url] = @Url WHERE [index] = @index">
<DeleteParameters>
<asp:Parameter Name="index" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="Url" Type="String" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="Url" Type="String" />
<asp:Parameter Name="index" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>
<asp:Label ID="Label1" runat="server" Text="Label" ForeColor="#996633"></asp:Label>
<br />
<asp:Label ID="Label2" runat="server" Text="Label" ForeColor="#0066FF"></asp:Label>
Server端程式碼:
Imports System.Data.SqlClient
Imports System.IO
Partial Class _Default
Inherits System.Web.UI.Page
Dim connstr As String = ConfigurationManager.ConnectionStrings("DBTestConn").ConnectionString
Public conn As New SqlConnection(connstr)
Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
Dim s As String = Format(Now, "ddHHmmssfff").ToString & ".jpg"
If FileUpload1.HasFile Then
FileUpload1.SaveAs("C:\inetpub\wwwroot\PhotoWS\Doc\" & s)
End If
Dim cmd As New SqlCommand("INSERT INTO dbo.T (Url)VALUES (@Url)", conn)
cmd.Parameters.Add("@Url", Data.SqlDbType.NVarChar, 200).Value = "~/Doc/" & s
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
End Sub
Dim key As String
Protected Sub Button2_Click(sender As Object, e As System.EventArgs) Handles Button2.Click
Dim cmd As New SqlCommand("SELECT Url FROM T", conn)
conn.Open()
Dim dblist As String() = New String(50) {}
Dim i As Integer = 0
Try
Dim dr As SqlDataReader = cmd.ExecuteReader()
Do While (dr.Read())
dblist(i) = dr.Item("Url")
i += +1
If i > 50 Then
Exit Do
End If
Loop
Catch ex As Exception
Finally
conn.Close()
End Try
i = 0
Dim dirPath As DirectoryInfo = New DirectoryInfo("C:\inetpub\wwwroot\PhotoWS\Doc")
Dim dirlist() As FileInfo = dirPath.GetFiles("*.jpg")
Dim dirlistD As String() = New String(dirlist.Length - 1) {}
For i = 0 To dblist.Length - 1
Label1.Text &= CStr(dblist(i))
Next
For i = 0 To dirlist.Length - 1
dirlistD(i) = "~/Doc/" & CStr(dirlist(i).ToString)
Label2.Text &= dirlistD(i)
Next
For i = 0 To dirlistD.Length - 1
key = dirlistD(i)
If Array.Exists(dblist, AddressOf myCompareFunction) = False Then
File.Delete("C:\inetpub\wwwroot\PhotoWS\" & dirlistD(i).Remove(0, 2))
End If
Next
End Sub
Private Function myCompareFunction(ByVal value As String) As Boolean
If value = key Then
Return True
Else
Return False
End If
End Function
End Class
---------------------------------------------------------------------------------參考:
1.自己努力&網路&請益王老師

沒有留言:
張貼留言
如果久久沒有反應,請直接寄信
應該是我不太會用google blogger 導致有留言過久未處理><
實在深感抱歉..