ASP.NET图片存储与读取SQLServer实战

需积分: 9 4 下载量 192 浏览量 更新于2024-10-04 1 收藏 37KB DOC 举报
"ASP.NET中图片在SQL Server中的存储和读取方法" 在ASP.NET开发中,经常需要处理图片数据,包括存储和读取。本文主要介绍如何在ASP.NET WebForm应用中将图片上传到SQL Server数据库,并从数据库中读取显示。以下是详细步骤: 1. 创建数据库表结构 首先,我们需要在SQL Server中创建一个用于存储图片的表。例如,可以创建一个名为`test`的表,包含两个字段:`id`(作为主键,自动增长)和`FImage`(用于存储图片数据,数据类型为`image`)。 ```sql CREATE TABLE test ( id INT IDENTITY(1,1), FImage image ) ``` 2. 创建存储过程 接下来,创建一个存储过程`UpdateImage`,用于接收图片数据并插入到`test`表中。 ```sql CREATE PROC UpdateImage ( @UpdateImage Image ) AS BEGIN Insert Into test(FImage) values(@UpdateImage) END GO ``` 3. ASP.NET页面设计 在ASP.NET WebForm应用中,创建一个名为`UpPhoto.aspx`的页面,包含一个文件上传控件`UpPhoto`和一个提交按钮`btnAdd`。 ```html <input id="UpPhoto" name="UpPhoto" runat="server" type="file"> <asp:Button ID="btnAdd" Name="btnAdd" runat="server" Text="上传" /> ``` 4. 后台处理 在对应的`UpPhoto.aspx.cs`后台代码文件中,为`btnAdd`按钮的点击事件编写处理代码。这段代码会读取上传的图片文件,将其转换为字节数组,然后调用存储过程将图片数据存入数据库。 ```csharp private void btnAdd_Click(object sender, EventArgs e) { // 获取上传的图片并转换为byte数组 HttpPostedFile upPhoto = UpPhoto.PostedFile; int upPhotoLength = upPhoto.ContentLength; byte[] PhotoArray = new byte[upPhotoLength]; Stream photoStream = upPhoto.InputStream; photoStream.Read(PhotoArray, 0, upPhotoLength); // 连接数据库 SqlConnection conn = new SqlConnection(); conn.ConnectionString = "DataSource=localhost;Database=test;User Id=sa;Pwd=sa"; // 创建并执行存储过程 SqlCommand cmd = new SqlCommand("UpdateImage", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@UpdateImage", SqlDbType.Image).Value = PhotoArray; // 开始事务并执行操作 conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); } ``` 5. 读取和显示图片 为了从数据库中读取图片并显示,可以创建一个新的ASP.NET页面,如`DisplayImage.aspx`。首先,从数据库中检索图片数据,然后将其写入响应流,以便浏览器可以正确地解析和显示。 ```csharp protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // 查询数据库获取图片数据 SqlConnection conn = new SqlConnection("DataSource=localhost;Database=test;User Id=sa;Pwd=sa"); SqlCommand cmd = new SqlCommand("SELECT FImage FROM test WHERE id = @id", conn); cmd.Parameters.AddWithValue("@id", 1); // 假设我们已知图片的id conn.Open(); var imageData = (byte[])cmd.ExecuteScalar(); // 将图片数据写入响应流 Response.ClearContent(); Response.ContentType = "image/jpeg"; // 根据实际图片类型设置 Response.BinaryWrite(imageData); Response.End(); } } ``` 通过以上步骤,你可以实现ASP.NET应用中图片的上传、存储和读取。在实际项目中,需要注意图片大小的限制、错误处理以及安全问题,比如使用参数化查询防止SQL注入攻击,以及考虑使用更现代的数据存储方式,如BLOB字段或云存储服务。