当前位置:编程学习 > C#/ASP.NET >>

如何把图片写入到数据库中

如何把图片写入到数据库中 --------------------编程问答-------------------- byte[] imagebody;
            SqlCommand cmd = new SqlCommand("insert into tbname(col1,col2) values(@col1,@col2)");
            cmd.Parameters.Add("@col1", SqlDbType.Int).Value = 1;
            cmd.Parameters.Add("@col2",SqlDbType.Image).Value=imagebody;
            cmd.ExecuteNonQuery();
--------------------编程问答-------------------- 1. 将图片二进制流写入数据库的二进制类型字段
2. 将图片用base64编码成字符串写入数据库Text或Varchar(MAX)类型字段 --------------------编程问答-------------------- string path = "";
                FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
                byte[] bytes = new Byte[6000000];
                fs.Read(bytes, 0, 6000000);
                cmd.Parameters.Add("@images", SqlDbType.Image, (int)fs.Length);
                cmd.Parameters["@images"].Value = bytes;

                cmd.CommandText ="insert into ....";
                cmd.ExecuteNonQuery(); --------------------编程问答-------------------- 1.将图片的路径存放在数据库中,用的时候,把路径读出来赋给图片控件.
2.将图片二进制流写入数据库的二进制类型字段. --------------------编程问答-------------------- 本文总结如何在.Net Winform和.Net webform(asp.net)中将图片存入sqlserver中并读取显示的方法
1,使用asp.net将图片上传并存入SqlServer中,然后从SqlServer中读取并显示出来
一,上传并存入SqlServer
 数据库结构
  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();
}
二,从SqlServer中读取并显示出来
在需要显示图片的地方添加如下代码:
<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 c="select * from test where id=2";//这里假设获取id为2的图片
                SqlCommand cmd=new SqlCommand(strSql,conn);
                conn.Open();
                SqlDataReader reader=cmd.EndExecuteReader();
                reader.Read();
                Response.ContentType="application/octet-stream";
                Response.BinaryWrite((Byte[])reader["FImage"]);
                Response.End();
                reader.Close();
                conn.Close();
     }
}

3,在winform中将图片存入sqlserver,并从sqlserver中读取并显示在picturebox中
1,存入sqlserver
数据库结构和使用的存储过过程,同上面的一样
 1.1,在窗体中加一个OpenFileDialog控件,命名为ofdSelectPic
 1.2,在窗体上添加一个打开文件按钮,添加如下单击事件代码:
    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中
 2.1 添加一个picturebox,名为ptbShow
 2.2 添加一个按钮,添加如下响应事件:
      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;









   
 
--------------------编程问答-------------------- 向5楼的兄弟致敬,学习. --------------------编程问答-------------------- 正解


string   path   =   " "; 
                                FileStream   fs   =   new   FileStream(path,   FileMode.Open,   FileAccess.Read); 
                                byte[]   bytes   =   new   Byte[6000000]; 
                                fs.Read(bytes,   0,   6000000); 
                                cmd.Parameters.Add( "@images ",   SqlDbType.Image,   (int)fs.Length); 
                                cmd.Parameters[ "@images "].Value   =   bytes; 

                                cmd.CommandText   = "insert   into   .... "; 
                                cmd.ExecuteNonQuery(); --------------------编程问答-------------------- 谢了,我后面的项目也要处理图片。 --------------------编程问答-------------------- 学习..... --------------------编程问答-------------------- mark --------------------编程问答-------------------- 想请教一下楼上的高手,图片写到数据库中,占空间吗 --------------------编程问答-------------------- 这个方法是将图片转换成二进制数组.
你在数据库中建一个Image类型的字段.
再把二进制数据插入数据库中..

    /// <summary>
    /// 按图片路径把图片打成二进制流
    /// </summary>
    /// <param name="path">图片路径</param>
    /// <returns></returns>
    public byte[] getImage(string path)
    {
        FileStream fs = File.OpenRead(path);
        MemoryStream ms = new MemoryStream();
        int bdata;
        while ((bdata = fs.ReadByte()) != -1)
        {
            ms.WriteByte(((byte)bdata));
        }
        byte[] data = (byte[])ms.ToArray();
        fs.Close();
        ms.Close();
        fs = null;
        ms = null;
        return data;
    }
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,