zoukankan      html  css  js  c++  java
  • .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;
  • 相关阅读:
    VS2015调试ArcMap Add-in插件提示尝试运行项目时出错,无法启动程序“路径arcmap.exe”
    c#重命名文件,报错“System.NotSupportedException”类型的未经处理的异常在 mscorlib.dll 中发生”
    C# string contains 不区分大小写
    CSS div 高度满屏
    ArcGIS Server SOE开发之奇怪异常:
    C# 读取XML注释
    .Net程序员之不学Java做安卓开发:奇怪的Java语法
    .Net程序员之不学Java做安卓开发:Android Studio中的即时调试窗口
    JS去遍历Table的所有单元格中的内容
    判断 checkbox 是否选中以及 设置checkbox选中
  • 原文地址:https://www.cnblogs.com/choi/p/372313.html
Copyright © 2011-2022 走看看