ASP.NET Tutorial/File Directory/Database Save Load

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Saving uploaded Files to a Database

   <source lang="csharp">

<%@ Page Language="C#" %> <%@ Import Namespace="System.IO" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server">

   protected void btnAdd_Click(object sender, EventArgs e)
   {
       if (upFile.HasFile)
       {
           srcFiles.Insert();
       }
   }

</script> <html xmlns="http://www.w3.org/1999/xhtml" > <title>FileUpload Database</title> <body>

   <form id="form1" runat="server">
   <asp:Label
       id="lblFile"
       Text="Word Document:"
       AssociatedControlID="upFile"
       Runat="server" />
   <asp:FileUpload
       id="upFile"
       Runat="server" />
   <asp:Button
       id="btnAdd"
       Text="Add Document"
       OnClick="btnAdd_Click"
       Runat="server" />

   <asp:Repeater
       id="rptFiles"
       DataSourceID="srcFiles"
       Runat="server">
       <HeaderTemplate>
    </HeaderTemplate> <ItemTemplate>
  • <asp:HyperLink id="lnkFile" Text="<%#Eval("FileName")%>" NavigateUrl="<%#Eval("Id", "~/FileHandler.ashx?id={0}")%>" Runat="server" />
  •        </ItemTemplate>
           <FooterTemplate>
    
       </FooterTemplate>
   </asp:Repeater>
   <asp:SqlDataSource
       id="srcFiles"
       ConnectionString="Server=.\SQLExpress;Integrated Security=True;
           AttachDbFileName=|DataDirectory|FilesDB.mdf;User Instance=True"
       SelectCommand="SELECT Id,FileName FROM Files"
       InsertCommand="INSERT Files (FileName,FileBytes) VALUES (@FileName,@FileBytes)"
       Runat="server">
       <InsertParameters>
           <asp:ControlParameter Name="FileName" ControlID="upFile" PropertyName="FileName" />
           <asp:ControlParameter Name="FileBytes" ControlID="upFile" PropertyName="FileBytes" />
       </InsertParameters>
   </asp:SqlDataSource>
   </form>

</body> </html> Table Structure Column Name Data Type Id Int (IDENTITY) FileName NVarchar(50) FileBytes Varbinary(max) File: FileHandler.ashx <%@ WebHandler Language="C#" Class="FileHandler" %> using System; using System.Web; using System.Data; using System.Data.SqlClient; public class FileHandler : IHttpHandler {

   const string conString = @"Server=.\SQLExpress;Integrated Security=True;
       AttachDbFileName=|DataDirectory|FilesDB.mdf;User Instance=True";
   public void ProcessRequest (HttpContext context) {
       SqlConnection con = new SqlConnection(conString);
       SqlCommand cmd =  new SqlCommand("SELECT FileBytes FROM Files WHERE Id=@Id", con);
       cmd.Parameters.AddWithValue("@Id", context.Request["Id"]);
       using (con)
       {
           con.Open();
           byte[] file = (byte[])cmd.ExecuteScalar();
           context.Response.BinaryWrite(file);
       }
   }
   public bool IsReusable {
       get {
           return false;
       }
   }

}</source>