RT 网上找了好久 都没有解决问题 
前提我是把Oracle中表数据导入到Access数据库当中  其中BOLB数据类型我转换成了OLE 对象
首先我读取的时候 代码如下:        DbDataReader Reader = MoreDb.ExecuteReader("Select ImageText from TextImage Where Id=1");
            while (Reader.Read())
            {
                //string aa = Reader["IMAGE"].ToString();
                //byte aa=Reader.GetSqlBinary(0)
                byte[] bytt = (byte[])Reader["ImageText"];
                if (bytt != null)
                {
                    MemoryStream buf = new MemoryStream((byte[])Reader["ImageText"]);
                    //Image image = Image.FromStream(buf);
                    Bitmap bitmap = new Bitmap(buf); 在此处 无论是image和Bitmap 都爆出错误提示 buf参数无效
                    pictureBox1.Image = bitmap;
                }
                else
                {
                    MessageBox.Show("未查询到图片");
                }然后我试着存入一个图片二进制数据 代码如下:            if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
                string str = openFileDialog1.FileName.ToString();
                FileStream fs = new FileStream(str, FileMode.Open, FileAccess.Read);
                BinaryReader by = new BinaryReader(fs);
                int length = (int)fs.Length;
                byte[] imgbyte = by.ReadBytes(length);
                int aa = MoreDb.ExecuteNonQuery("Insert into ImageText(ImageText)Values(" + imgbyte + ")");//此处总是提示SQL有误 网上查询在插入二进制数据时不能直接这样写
    //DbParameter spFile = new DbParameter("@file", DbType.Binary); 我尝试使用这种方法代替可以行不通             } 做过的朋友请帮忙解惑一下!!数据库图片二进制Bitmap

解决方案 »

  1.   

    参考http://www.cnblogs.com/tuyile006/archive/2007/01/08/614718.html
      

  2.   

    图片类型的读取和存取,好像有一些特殊的属性要处理。可以试下 cyq.data 数据层框架来操作数据库,特殊的不特殊的都不用了,使用很简单。
      

  3.   

     这里面的方法我都找到了 行不通 读取的时候
      Bitmap bitmap = new Bitmap(buf); 总是提示buf参数无效!
      

  4.   

    Bitmap没有一个参数为memoryStream类型的构造方法,只有一个IO.Stream类型参数的构造方法,你换成Stream试一下,应该就可以了
      

  5.   

    FromBase64String  这个试试 
      

  6.   

    Bitmap没有一个参数为memoryStream类型的构造方法,只有一个IO.Stream类型参数的构造方法,你换成Stream试一下,应该就可以了
    我刚才测试了几次 感觉是不是我数据库当中数据的问题 因为这里面的数据是我从Oracle数据库导入到Access数据库当中 开始不是OLE对象是文本类型 我给改过来的
    二进制类型的数据更改不了嘛?
                //    string strComm = " UPDATE IMAGE_LIST Set IMAGE=) ";            //    strComm += "@photoBinary Where CONTENT_ID='201202132979'";            //    OleDbCommand myComm = new OleDbCommand(strComm, myConn);            //    OleDbParameter[] param = new OleDbParameter[1];
                //    param[0] = new OleDbParameter("@photoBinary", OleDbType.Binary, imgbyte.Length);
                //    param[0].Value = imgbyte;
                //    myComm.Parameters.Add(param[0]);
                //    myConn.Open();
                //    myComm.ExecuteNonQuery();
    不能直接更改嘛? 好麻烦!!
      

  7.   


    这个可以有        /// <summary> 
            /// 把 Base64 转图片
            /// </summary> 
            /// <param name="base64String"></param> 
            public MemoryStream Base64ToImage(string base64String)
            {
                // base64String.Substring(0, base64String.Length / 40 * 40) 主要是 Base64 編碼長度有規定必須是 0 或 4 的整數倍,所以為免出錯,把長度處理一下 
                byte[] imageBytes = Convert.FromBase64String(base64String);
                // byte[] imageBytes = Convert.FromBase64String(base64String.Substring(0,128)); 
                MemoryStream _ms = new MemoryStream(imageBytes, 0, imageBytes.Length);            // Convert byte[] to Image 
                _ms.Write(imageBytes, 0, imageBytes.Length);
                /*
                System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true);            image.Save(Server.MapPath("Report"), ImageFormat.Png);
                */
                return _ms;
            }        // 把图片转 Base64 编码
            public string ImageToBase64(System.Drawing.Image image, System.Drawing.Imaging.ImageFormat format)
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    // Convert Image to byte[] 
                    image.Save(ms, format);
                    byte[] imageBytes = ms.ToArray();                // Convert byte[] to Base64 String 
                    string base64String = Convert.ToBase64String(imageBytes);
                    return base64String;
                }
            }
      

  8.   

    1 参数无效应该是数据不对,不能显示成图像,可以保存到文件另外分析。
    2 保存二进制数据,请使用 SQL 参数,不要直接拼接 SQL。