与图片的二进制数据库存储和显示
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 = 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.读取二进制图片在页面显示
//读取图片
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控件显示从数据库中读出的二进制图片
![]()
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方式显示图片
![]()
----------------------------
<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显示读出的二进制图片
//样板列
<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;
}
}