我在网上找到的一般都是用这种方法从SQL里读取IMAGE属性的字段,并赋值给IMAGE对象MemoryStream ms = new MemoryStream((byte[])reader[2]);//这里得到的并不是二进制流内容,而是一个数据类型的说明
Image image = Image.FromStream(ms, true);//这里提示参数错误我用的.NET2005和SQL2005,为什么这种方法在我的程序里却不行,,,,
我在调试窗口里看到(byte[])reader[2]读出来的数据却只有13维数,而我存进数据库里的是3000多维
而且(byte[])reader[2]的13维数内容并不是二进制流,而是"System.byte[]"这个字符串(这个字符串刚好13位).....
通过这里我就知道MS得到的的并不是二进制内容,而是数据类型.....我就郁闷了,别人的代码都是这样写的,为什么到我的机器上就不行,我把别人的代码放在我本地运行,重新做数据库,reader[2]照样得到的还是数据类型,而不是二进制流内容.
哪位大虾帮帮我!!!!!!!!!!

解决方案 »

  1.   

    你可以存储图片的路径啊,那就简单多了,根据路径然后处理图片当然了,也可以存储image,给你一个例子吧图片image和byte处理,fileupload上传图片 -- 
    这是通过浏览某图片,把他存放到数据库中
    string filename = txt_filename.Text;
            string filecomment = txt_filecomment.Text;
            string SlaveFileName = FileUpload1.PostedFile.FileName;
            byte[] FileContent_img = null;
            DateTime UploadTime = DateTime.Now.Date;        string id = lbl_id.Text;
            RemoteRule remoteRule = (RemoteRule)GetRemoteingObjectByType(typeof(RemoteRule), "remoterule");
            DataSet ds = new DataSet();
            if (id == "")
            {
                ds = remoteRule.GetRuleByID(-1);
                DataRow dr = ds.Tables[0].NewRow();
                if (SlaveFileName != "")
                {
                    //读取所上传的文件的二进制流
                    HttpPostedFile file1 = FileUpload1.PostedFile;
                    int filelength = Convert.ToInt32(file1.InputStream.Length);
                    FileContent_img = new byte[filelength];
                    file1.InputStream.Read(FileContent_img, 0, filelength);//这里所说的二进制流表现为什么样
                }
                else
                {
                    SlaveFileName = null;
                }            dr["FileName_ch"] = filename;
                dr["FileDesc_ch"] = filecomment;
                dr["SlaveFileName_ch"] = SlaveFileName;
                dr["FileContent_img"] = FileContent_img;
                dr["UploadUser_ch"] = this.SystemModuleSettings.UserManage.CurrUserInfo["RealName"].ToString();
                dr["UploadTime_dt"] = UploadTime;
                ds.Tables[0].Rows.Add(dr);
                string result = remoteRule.InsRule(ds);
                if (result == "")
                {
                    Response.Write(" <script>alert('插入不成功') </script>");
                }
                else
                {
                    if (result != "f")
                    {
                        Response.Write(" <script>alert('插入成功') </script>");
                        ViewState["PageState"] = "edit";
                        lbl_id.Text = result.Substring(result.IndexOf(",") + 1);
                        setControlsValue();
                    }
                    else
                    {
                        Response.Write(" <script>alert('插入不成功') </script>");
                    }
                }
            } 
    -- 
    显示图片的byte[] Image_img = (byte[])ds_image.Tables[0].Rows[0]["Image_im"];
                                if (Image_img.Length == 0)
                                    return;
                                int filelength = Image_img.Length;
                                string imageName = ds_image.Tables[0].Rows[0][1].ToString() + "1" + ".jpg";
                                string myUrl = HttpContext.Current.Server.MapPath(this.Request.ApplicationPath) + @"\TempDownLoad\" + imageName;
                                FileStream fs = new FileStream(myUrl, FileMode.OpenOrCreate);
                                BinaryWriter w = new BinaryWriter(fs);
                                w.BaseStream.Write(Image_img, 0, filelength);
                                w.Flush();
                                w.Close();                            Image1.ImageUrl = Context.Request.ApplicationPath + "/TempDownLoad/" + imageName;
                                Bitmap bitmap = new Bitmap(myUrl);
                                Image1.Width = bitmap.Width;
                                Image1.Height = bitmap
      

  2.   

    怎么才能从数据库中读到二进制内容,而不是二进制类型,,,,我就郁闷了,网上写的方法读出来的都是二进制类型
    我的数据库中字段类型是 image
      

  3.   

    MemoryStream ms = new MemoryStream((byte[])reader[2]);
    //这里得到的并不是二进制流内容,而是一个数据类型的说明,
    //注意数据库中索引的顺序是以0开始的,第2个字段(实际上是第三个物理字段)确实是你存储图片内容的Image字段吗
    Image image = Image.FromStream(ms, true);//这里提示参数错误