• .NET在SQL Server中的图片存取技术(转)


    本文总结如何在.Net WinForm和.Net WebForm(asp.net)中将图片存入SQL Server中并读取显示的方法 。
    1.使用asp.net将图片上传并存入SQL Server中,然后从SQL Server中读取并显示出来:
    1)上传并存入SQL Server
    数据库结构
    create table test
    {
    id identity(1,1),
    FImage image
    }
    相关的存储过程
    Create proc UpdateImage
    (
    @UpdateImage Image
    )
    As
    Insert Into test(FImage) values(@UpdateImage)
    GO
    在UpPhoto.aspx文件中添加如下:
    <input id="UpPhoto" name="UpPhoto" runat="server" type="file">
    <asp:Button id="btnAdd" name="btnAdd" runat="server" Text="上传"></asp:Button>
    然后在后置代码文件UpPhoto.aspx.cs添加btnAdd按钮的单击事件处理代码:
    private void btnAdd_Click(object sender, System.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="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";
    SqlCommand cmd=new SqlCommand("UpdateImage",conn);
    cmd.CommandType=CommandType.StoredProcedure;
    cmd.Parameters.Add("@UpdateImage",SqlDbType.Image);
    cmd.Parameters["@UpdateImage"].Value=PhotoArray;
    //如果你希望不使用存储过程来添加图片把上面四句代码改为:
    //string strSql="Insert into test(FImage) values(@FImage)";
    //SqlCommand cmd=new SqlCommand(strSql,conn);
    //cmd.Parameters.Add("@FImage",SqlDbType.Image);
    //cmd.Parameters["@FImage"].Value=PhotoArray;
    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();
    }
    2)从SQL Server中读取并显示出来
    在需要显示图片的地方添加如下代码:
    <asp:image id="imgPhoto" runat="server" ImageUrl="ShowPhoto.aspx"></asp:image>
    ShowPhoto.aspx主体代码:
    private void Page_Load(object sender, System.EventArgs e)
    {
    if(!Page.IsPostBack)
    {
    SqlConnection conn=new SqlConnection()
    conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";
    string strSql="select * from test where id=2";//这里假设获取id为2的图片
    SqlCommand cmd=new SqlCommand(strSql,conn);
    conn.Open();
    SqlDataReader reader=cmd.ExecuteReader();
    reader.Read();
    Response.ContentType="application/octet-stream";
    Response.BinaryWrite((Byte[])reader["FImage"]);
    Response.End();
    reader.Close();
    }
    }

    2.在WinForm中将图片存入SQL Server,并从SQL Server中读取并显示在picturebox中
    1),存入SQL Server
    数据库结构和使用的存储过过程,同上面的一样
    首先,在窗体中加一个OpenFileDialog控件,命名为ofdSelectPic ;
    然后,在窗体上添加一个打开文件按钮,添加如下单击事件代码:
    Stream ms;
    byte[] picbyte;
    //ofdSelectPic.ShowDialog();
    if (ofdSelectPic.ShowDialog()==DialogResult.OK)
    {
    if ((ms=ofdSelectPic.OpenFile())!=null)
    {
    //MessageBox.Show("ok");
    picbyte=new byte[ms.Length];
    ms.Position=0;
    ms.Read(picbyte,0,Convert.ToInt32(ms.Length));
    //MessageBox.Show("读取完毕!");
    //连接数据库
    SqlConnection conn=new SqlConnection();
    conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";
    SqlCommand cmd=new SqlCommand("UpdateImage",conn);
    cmd.CommandType=CommandType.StoredProcedure;
    cmd.Parameters.Add("@UpdateImage",SqlDbType.Image);
    cmd.Parameters["@UpdateImage"].Value=picbyte;
    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();
    ms.Close();
    }
    }
    2)读取并显示在picturebox中
    首先,添加一个picturebox,名为ptbShow
    然后,添加一个按钮,添加如下响应事件:
    SqlConnection conn=new SqlConnection();
    conn.ConnectionString="Data Source=localhost;Database=test;User Id=sa;Pwd=sa";
    string strSql="select FImage from test where id=1";
    SqlCommand cmd=new SqlCommand(strSql,conn);
    conn.Open();
    SqlDataReader reader=cmd.ExecuteReader();
    reader.Read();
    MemoryStream ms=new MemoryStream((byte[])reader["FImage"]);

    Image image=Image.FromStream(ms,true);
    reader.Close();
    conn.Close();
    ptbShow.Image=image;
  • 相关阅读:
    fiddler工具窗口功能介绍
    Fiddler导出jmx格式实现方法
    Fiddler抓包时一直请求:http://clients1.google.com:443
    内置函数的使用
    python中操作excel、ddt、config、logging方法
    Pycharm 将代码上传到GitHub
    unittest框架-优化一【变量参数化】
    excel的读取
    ddt数据驱动
    selenium中的js和jquery的相关用法
  • 原文地址:https://www.cnblogs.com/choi/p/372313.html
Copyright © 2020-2023  润新知