1.将图片以二进制存入数据库 2.读取二进制图片在页面显示 3.设置Image控件显示从数据库中读出的二进制图片 4.GridView中ImageField以URL方式显示图片 5.GridView显示读出的二进制图片 ==================== 1.将图片以二进制存入数据库 代码如下://保存图片到数据库 protected void Button1_Click(object sender, EventArgs e) { //图片路径 string strPath = “~/photo/03.JPG”; string strPhotoPath = Serve 在ASP.NET开发中,GridView控件是常用的数据显示控件,它可以方便地展示表格形式的数据。在实际应用中,我们有时需要在GridView中显示图片,尤其是当图片存储在数据库中以二进制数据形式存在时。以下就是如何实现这一功能的详细步骤: 1. **将图片以二进制存入数据库** 在这个阶段,我们需要读取图片文件并将其转换为二进制数据,然后存储到数据库中。以下是一个简单的示例代码: ```csharp protected void Button1_Click(object sender, EventArgs e) { string strPath = "~/photo/03.JPG"; string strPhotoPath = Server.MapPath(strPath); using (FileStream fs = new System.IO.FileStream(strPhotoPath, FileMode.Open, FileAccess.Read)) { byte[] photo = new byte[fs.Length]; fs.Read(photo, 0, (int)fs.Length); // 使用SQL连接和命令,将二进制数据插入数据库 // ... } } ``` 这段代码首先获取图片文件的物理路径,然后读取文件内容到一个字节数组。接着,你可以使用ADO.NET创建SQL命令,将这个字节数组作为二进制字段存入数据库。 2. **读取二进制图片在页面显示** 当需要在页面上显示这些图片时,我们需要从数据库中读取二进制数据并将其转换回图片。这里有两种方法: - 直接使用`SqlDataReader`读取数据,然后通过`Response.BinaryWrite`写入响应流: ```csharp using (SqlConnection myConn = new SqlConnection("Data Source=127.0.0.1;Initial Catalog=TestDB;User ID=sa;Password=sa")) { SqlCommand myComm = new SqlCommand("SELECT personPhoto FROM personPhoto WHERE personName='wangwu'", myConn); myConn.Open(); using (SqlDataReader dr = myComm.ExecuteReader()) { if (dr.Read()) { byte[] photo = (byte[])dr["personPhoto"]; Response.BinaryWrite(photo); } } myConn.Close(); } ``` - 或者使用`SqlDataAdapter`填充`DataSet`,再从其中获取二进制数据: ```csharp using (SqlConnection myConn = new SqlConnection("Data Source=127.0.0.1;Initial Catalog=TestDB;User ID=sa;Password=sa")) { SqlDataAdapter myda = new SqlDataAdapter("SELECT personPhoto FROM personPhoto WHERE personName='wangwu'", myConn); DataSet myds = new DataSet(); myConn.Open(); myda.Fill(myds); myConn.Close(); byte[] photo = (byte[])myds.Tables[0].Rows[0]["personPhoto"]; Response.BinaryWrite(photo); } ``` 3. **设置Image控件显示从数据库中读出的二进制图片** 如果你想在网页上用Image控件显示图片,可以直接设置控件的`ImageUrl`属性为一个处理请求返回二进制数据的URL。创建一个HTTP处理程序(如`ImageHandler.ashx`),并在其中读取并返回二进制图片数据。例如: ```csharp public class ImageHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { string personName = context.Request.QueryString["personName"]; // 从数据库中读取图片数据,并设置context.Response.ContentType为图片的MIME类型 // ... byte[] photo = GetPhotoFromDB(personName); context.Response.BinaryWrite(photo); } // 其他方法和属性... } ``` 然后在ASP.NET页面上设置Image控件: ```aspx <asp:Image ID="imgPerson" runat="server" ImageUrl="~/ImageHandler.ashx?personName=wangwu" /> ``` 4. **在GridView中ImageField以URL方式显示图片** 要在GridView的ImageField中显示图片,可以使用模板列并设置`ImageUrl`属性指向HTTP处理程序,或者使用一个自定义的BulletedList控件来显示图片: ```aspx <asp:GridView ID="gvPhotos" runat="server"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:Image ID="imgPhoto" runat="server" ImageUrl='<%# "ImageHandler.ashx?personName=" + Eval("personName") %>' /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> ``` 这里,`Eval("personName")`将从数据源中获取用户名,然后构造指向`ImageHandler`的URL。 5. **GridView显示读出的二进制图片** 如果不使用URL方式,你可以在RowDataBound事件中动态设置Image控件的`ImageUrl`,或者直接在模板列中将二进制数据写入响应流。这通常涉及到更多的代码,因为需要在事件处理程序中处理每个行的数据绑定。 ASP.NET中的GridView控件配合HTTP处理程序,可以方便地处理和显示数据库中存储的二进制图片数据。通过理解以上步骤,你可以灵活地根据需求调整代码,实现各种显示图片的功能。记得在实际操作中,注意处理异常、优化性能以及确保数据安全。
剩余6页未读,继续阅读
- 粉丝: 4
- 资源: 947
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0