与图片的二进制数据库存储和显示
1.将图片以二进制存入数据库
2.读取二进制图片在页面显示
3.设置Image控件显示从数据库中读出的二进制图片
4.GridView中ImageField以URL方式显示图片
5.GridView显示读出的二进制图片
====================
1.将图片以二进制存入数据库
Code//保存图片到数据库 protected void Button1_Click(object sender, EventArgs e) { //图片路径 string strPath = "~/photo/03.JPG"; string strPhotoPath = Server.MapPath(strPath); //读取图片 FileStream fs = new System.IO.FileStream(strPhotoPath, FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fs); byte[] photo = br.ReadBytes((int)fs.Length); br.Close(); fs.Close(); //存入 SqlConnection myConn = new SqlConnection("Data Source=127.0.0.1;Initial Catalog=TestDB;User ID=sa;Password=sa"); string strComm = " INSERT INTO personPhoto(personName, personPhotoPath, personPhoto) "; strComm += " VALUES('wangwu', '" + strPath + "', @photoBinary )"; SqlCommand myComm = new SqlCommand(strComm, myConn); myComm.Parameters.Add("@photoBinary", SqlDbType.Binary,photo.Length); myComm.Parameters["@photoBinary"].Value = photo; myConn.Open(); myComm.ExecuteNonQuery(); myConn.Close(); }
2.读取二进制图片在页面显示
Code
//读取图片 SqlConnection myConn = new SqlConnection("Data Source=127.0.0.1;Initial Catalog=TestDB;User ID=sa;Password=sa"); string strComm = " SELECT personPhoto FROM personPhoto WHERE personName='wangwu' "; SqlCommand myComm = new SqlCommand(strComm, myConn); myConn.Open(); SqlDataReader dr = myComm.ExecuteReader(); while (dr.Read()) { byte[] photo = (byte[])dr["personPhoto"]; this.Response.BinaryWrite(photo); } dr.Close(); myConn.Close(); //或
///////////////////////////////////////////
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"]; this.Response.BinaryWrite(photo);
3.设置Image控件显示从数据库中读出的二进制图片
Code
SqlConnection myConn = new SqlConnection("Data Source=192.168.0.36;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"]; //图片路径 string strPath = "~/photo/wangwu.JPG"; string strPhotoPath = Server.MapPath(strPath); //保存图片文件 BinaryWriter bw = new BinaryWriter(File.Open(strPhotoPath,FileMode.OpenOrCreate)); bw.Write(photo); bw.Close(); //显示图片 this.Image1.ImageUrl = strPath;
4.GridView中ImageField以URL方式显示图片
Code ---------------------------- <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"> <Columns> <asp:BoundField DataField="personName" HeaderText="姓名" /> <asp:ImageField DataImageUrlField="personPhotoPath" HeaderText="图片"> </asp:ImageField> </Columns> </asp:GridView> //后台直接绑定即可
5.GridView显示读出的二进制图片
Code //样板列 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound"> <Columns> <asp:BoundField DataField="personName" HeaderText="姓名" /> <asp:ImageField DataImageUrlField="personPhotoPath" HeaderText="图片"> </asp:ImageField> <asp:TemplateField HeaderText="图片"> <ItemTemplate> <asp:Image ID="Image1" runat="server" /> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowIndex < 0) return; // System.ComponentModel.Container string strPersonName = (string)DataBinder.Eval(e.Row.DataItem, "personName"); Image tmp_Image = (Image)e.Row.Cells[2].FindControl("Image1"); if (!System.Convert.IsDBNull(DataBinder.Eval(e.Row.DataItem, "personPhoto"))) { // byte[] photo = (byte[])DataBinder.Eval(e.Row.DataItem, "personPhoto"); //图片路径 string strPath = "~/photo/" + strPersonName.Trim() + ".JPG"; string strPhotoPath = Server.MapPath(strPath); //保存图片文件 BinaryWriter bw = new BinaryWriter(File.Open(strPhotoPath, FileMode.OpenOrCreate)); bw.Write(photo); bw.Close(); //显示图片 tmp_Image.ImageUrl = strPath; } }