• 数据库中图片的二进制存储和显示


    与图片的二进制数据库存储和显示

    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;

    }

    }

  • 相关阅读:
    494. Target Sum 添加标点符号求和
    636. Exclusive Time of Functions 进程的执行时间
    714. Best Time to Buy and Sell Stock with Transaction Fee有交易费的买卖股票
    377. Combination Sum IV 返回符合目标和的组数
    325. Maximum Size Subarray Sum Equals k 和等于k的最长子数组
    275. H-Index II 递增排序后的论文引用量
    274. H-Index论文引用量
    RabbitMQ学习之HelloWorld(1)
    java之struts2的数据处理
    java之struts2的action的创建方式
  • 原文地址:https://www.cnblogs.com/guaiguaill0/p/3414687.html
Copyright © 2020-2023  润新知