ASP.NET Tutorial/File Directory/Database Save Load
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>