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

讀取數據庫中圖片!!!!!!!!!1

以下是我寫的一個簡單代易做图,保存的會了,現在做讀取出現了錯誤.總是說“參數無效”,問題出現在這條代易做图上    pictureBox1.Image = (Bitmap)Image.FromStream(memorystream);
懇請高手指教     


    SqlConnection con = new SqlConnection(strCon);
            string strCmd = "select PIC from UserInfor where id=1";
            SqlCommand Cmd = new SqlCommand(strCmd, con);
            try
            {
                con.Open();
                Byte[] bytePIC = (Byte[])Cmd.ExecuteScalar();
                if (bytePIC.Length > 0)
                {
                    MemoryStream memorystream = new MemoryStream(bytePIC);
                    memorystream.Write(bytePIC, 0, bytePIC.Length);
                    pictureBox1.Image = (Bitmap)Image.FromStream(memorystream);
                    memorystream.Close();
                }

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                con.Close();
            }
            --------------------编程问答-------------------- MemoryStream buf = new MemoryStream((byte[])reader[0]);
                    Image image = Image.FromStream(buf,true);
                    this.pictureBox1.Image = image; --------------------编程问答-------------------- 不行啊,大哥,還是那樣的錯誤 --------------------编程问答-------------------- 完整点的,你参考下!
SqlConnection conn = new SqlConnection(@"data source=.;uid=sa;pwd=;database=master");
            conn.Open();
            SqlCommand cmd = new SqlCommand("select image1 from image", conn);
            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                    MemoryStream buf = new MemoryStream((byte[])reader[0]);
                    Image image = Image.FromStream(buf,true);
                    this.pictureBox1.Image = image;
             }
             --------------------编程问答-------------------- pictureBox1.Image = (Bitmap)Image.FromStream(memorystream); 
改成
pictureBox1.Image = (Image)Image.FromStream(memorystream); 
--------------------编程问答-------------------- 还没遇到过,呵呵,等我回去研究研究!会了就告诉你 --------------------编程问答-------------------- 不好意思,我研究了一下,不过发现你的问题不属于网站开发,呵呵!上GOOGLE上再找找吧,可能是你使用的读取流类不正确。 --------------------编程问答-------------------- 上幾天又點忙,我把你的源代易做图一點不改的copy到程序里,還是不行,哎~~~~~~~~~~
順便說一下,我做的事WIN結構 --------------------编程问答--------------------
引用 7 楼 yolee 的回复:
上幾天又點忙,我把你的源代易做图一點不改的copy到程序里,還是不行,哎~~~~~~~~~~ 
順便說一下,我做的事WIN結構

當然啊數據連接字符串是不一樣的-_-!!! --------------------编程问答-------------------- 奇怪,我用楼主的代码试可以正常运行呀,只是改了一下连接类型,因为我的数据库是Oracle的 --------------------编程问答-------------------- 是Image.FromStream报出的错吧
通常是因为Stream中的内容并不是一个已知的图形格式 --------------------编程问答-------------------- 写       
     FileStream stream = new FileStream(Server.MapPath("aa/Logo.jpg"), FileMode.Open, FileAccess.Read);
            byte[] blob = new byte[stream.Length];
            stream.Read(blob, 0, (int)stream.Length);
            stream.Close();


            FileStream fs = new FileStream("c:\\b.jpeg", FileMode.OpenOrCreate, FileAccess.Write);
            BinaryWriter bw = new BinaryWriter(fs);
            bw.Write((byte[])blob);
            bw.Close();
            hahaimage.ImageUrl = "c:\\b.jpeg";

你参考一下 --------------------编程问答-------------------- 流的形式读取图片? 只能是在系统中有的图片,并且,右键属性,设为嵌入的资源才行的,呵呵!
    还要是流形式的图片?  ico格式行 --------------------编程问答-------------------- 确认图片数据没有问题,另外参考下面代码,
======
转为byte类型后存入Image字段。
byte[] imagebytes=null;
FileStream fs=new FileStream(Image_path,FileMode.Open);
BinaryReader br=new BinaryReader(fs);
imagebytes=br.ReadBytes(br.Length);
SqlParameter parInput22=cmd.Parameters.Add("@员工图片",SqlDbType.Image);
parInput22.Direction=ParameterDirection.Input;
cmd.Parameters["@员工图片"].Value=imagebytes;
cmd.ExecuteNonQuery();


--------------------编程问答-------------------- 数据库中操作图片
How To Read and Write BLOB Data by Using ADO.NET with Visual C# .NET
http://support.microsoft.com/default.aspx?scid=kb;EN-US;309158


DataGrid显示图片(物理路径式和Stream流式)和添加图片到数据库
http://singlepine.cnblogs.com/articles/288027.html --------------------编程问答-------------------- Net下图片的常见存储与读取凡是有以下几种:
存储图片:以二进制的形式存储图片时,要把数据库中的字段设置为Image数据类型(SQL Server),存储的数据是Byte[].
1.参数是图片路径:返回Byte[]类型:  public byte[] GetPictureData(string imagepath)
        {
            /**/////根据图片文件的路径使用文件流打开,并保存为byte[]   
            FileStream fs = new FileStream(imagepath, FileMode.Open);//可以是其他重载方法 
            byte[] byData = new byte[fs.Length];
            fs.Read(byData, 0, byData.Length);
            fs.Close();
            return byData;
        }2.参数类型是Image对象,返回Byte[]类型:  public byte[] PhotoImageInsert(System.Drawing.Image imgPhoto)
        {
            //将Image转换成流数据,并保存为byte[]   
            MemoryStream mstream = new MemoryStream();
            imgPhoto.Save(mstream, System.Drawing.Imaging.ImageFormat.Bmp);
            byte[] byData = new Byte[mstream.Length];
            mstream.Position = 0;
            mstream.Read(byData, 0, byData.Length);
            mstream.Close();
            return byData;
        }好了,这样通过上面的方法就可以把图片转换成Byte[]对象,然后就把这个对象保存到数据库中去就实现了把图片的二进制格式保存到数据库中去了。下面我就谈谈如何把数据库中的图片读取出来,实际上这是一个相反的过程。
读取图片:把相应的字段转换成Byte[]即:Byte[] bt=(Byte[])XXXX
1.参数是Byte[]类型,返回值是Image对象:  public System.Drawing.Image ReturnPhoto(byte[] streamByte)
        {
            System.IO.MemoryStream ms = new System.IO.MemoryStream(streamByte);
            System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
            return img;
        }2.参数是Byte[] 类型,没有返回值,这是针对asp.net中把图片从输出到网页上(Response.BinaryWrite)
 public void WritePhoto(byte[] streamByte)
        {
            // Response.ContentType 的默认值为默认值为“text/html”
            Response.ContentType = "image/GIF";
            //图片输出的类型有: image/GIF  image/JPEG
            Response.BinaryWrite(streamByte);
        }补充:
针对Response.ContentType的值,除了针对图片的类型外,还有其他的类型:             Response.ContentType = "application/msword";
            Response.ContentType = "application/x-shockwave-flash";
            Response.ContentType = "application/vnd.ms-excel";另外可以针对不同的格式,用不同的输出类型以适合不同的类型:   switch (dataread("document_type"))
            {
                case "doc":
                    Response.ContentType = "application/msword";
                case "swf":
                    Response.ContentType = "application/x-shockwave-flash";
                case "xls":
                    Response.ContentType = "application/vnd.ms-excel";
                case "gif":
                    Response.ContentType = "image/gif";
                case "Jpg":
                    Response.ContentType = "image/jpeg";
            } --------------------编程问答-------------------- 呵呵,N个人问过最后才发现是存数据库的时候错了,不管弄就是取不出来.
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,