Image files are a standard part of every ASP.NET application. While most sites use Web server directories to store image files, another option is utilizing a database. The database provides a better approach to managing application image files. In this article, we examine using SQL Server 2000 to manage image files with ASP.NET via both VB.NET and C#.
Using a database for image management may not be appropriate for smaller applications with images that rarely (if ever) change, but it is an excellent option for an application that contains numerous images that may frequently change. Also, additional information may be stored with the image to facilitate searching, sorting, and so forth.
The key to storing images in a database is the actual backend data store. In this article, we use a SQL Server 2000 table that contains identity, name, description, content type, file size, and image fields. The name and description columns are text. The identity column is numeric and the image data type is used for the actual image. The content type field is text and file size is integer, with these two fields used to display the image. The T-SQL in Listing A creates the table. In addition, we'll use a stored procedure to actually place images into the table. View Listing B. We utilize this stored procedure via our VB.NET and C# code to populate the table.
Placing images in the database
The first step in the process is inserting the images into the SQL Server database. This may be simplified (for the user) by providing a Web user interface. We can easily provide this interface via ASP.NET. The C# code in Listing C provides a simple interface, allowing the user to enter a description for the image and the actual image file via an HTML input field (System.Web.UI.HtmlControls.HtmlInputFile object). This allows the user to browse the file system and submit an image. (Listing D contains the equivalent VB.NET code.)
A few notes about this code:
- An HTML input field <input type=file> allows the user to select the necessary image file (which will be inserted into the database). The PostedFile property of this control provides access to the submitted file. An HttpPostedFile object is used to work with the submitted file.
- The encoding type of the form is set to multipart/form-data (enctype="multipart/form-data") to facilitate the submission of the image file.
- A label control is used to notify the user of any errors processing a submission. It is located at the top of the page, and it is only visible and contains text if an exception is encountered.
- The System.Data and System.Data.SqlClient namespaces are utilized to work with the backend database.
- The System.IO namespace is necessary for working with the stream to save the image.
- SqlParameter objects are used to submit values for the stored procedure parameters.
- The name associated with an image (Name field in database table) is populated via the filename property of the uploaded file. In addition, the content type and file size are retrieved from the uploaded file.
- Object cleanup is handled in the finally block.
Using the stored images
At this point, users may add image files to the database, so we can use these images in an application. The content type and file size stored with the image are used to spit the image to the screen (or wherever it is needed). The C# code in Listing E retrieves an image from the database and displays it via the Response object. (Listing F contains the VB.NET equivalent code.)
A few notes about the code:
- The image id is hard-coded, but we could easily pass a value into the page via the QueryString.
- Values retrieved from the database are cast to the necessary values for the output.
- The Response object is used to spit out the image stored in the database. The image is read and written as a byte stream using the Write method of the Response object's OutputStream property.
Just the beginning
Using a database as a vehicle for image storage and organization provides a much cleaner solution than using the standard file system. Next week, we'll take the concept further by enhancing the administration interface and offering a better approach to using the images on an ASP.NET powered site.
TechRepublic's free .NET newsletter, delivered each Wednesday, contains useful tips and coding examples on topics such as Web services, ASP.NET, ADO.NET, and Visual Studio .NET. Automatically sign up today!
Tony Patton has worn many hats over his 15+ years in the IT industry while witnessing many technologies come and go. He currently focuses on .NET and Web Development while trying to grasp the many facets of supporting such technologies in a production environment on a daily basis.