我用的代码基本如下:用下面的代码操作小图片(20KB左右,是可以插入DB和获取到的),但如果图片过大(大于50KB时),就不能插入DB了.提示什么类型转换错误啥的.
请高手指点~~
       
 private Byte[] getPhoto()
        {            string url = Request.Form["file1"];
            Byte[] byte2 = null;
            if (!string.IsNullOrEmpty(url))
            {
                //读取页面图片
                FileStream fs = new FileStream(@url, FileMode.Open, FileAccess.Read);//读取D盘c.jpg转换为数据流
                byte2 = new byte[fs.Length];
                fs.Read(byte2, 0, Convert.ToInt32(fs.Length));
                fs.Close();
            
            }
            return byte2;
       
        }        /// <summary>
        /// 数据库插入图片
        /// </summary>
        /// <param name="photoNumber">图片编号</param>
        /// <param name="PhotoImage">图片数据</param>
        /// <returns>是否插入成功</returns>
       public bool SetPhoto(string photoNumber, byte[] PhotoImage)
       {           OracleParameter[] param = new OracleParameter[2];
           param[0] = new OracleParameter("p_no",OracleType.Char);
           param[0].Value=photoNumber;
           param[1] = new OracleParameter("p_image", OracleType.Blob);
           param[1].Value = PhotoImage;         return  DBHelper.ExecuteNonQuery("ACCP.proc_photo",CommandType.StoredProcedure,param)>0;
         
       }  

解决方案 »

  1.   

    http://blog.csdn.net/xiongxyt2/article/details/5655945
      

  2.   

    首先谢谢您的参与;
    我在网上看到,说要把Byte[]转换为Oraclelob类型就可以了,那么这个如何转呢?
    (备注:我的DB是Oracle)
      

  3.   

    不用转,你直接把你的数据库图片类型改为blob,这个能直接接受二进制byte数组。
      

  4.   

    谢谢 3楼道朋友.
    我DB中就是BLOB的类型哦,当我的Byte数组容量在20K左右时,是可以存入的.但大于这个数值时,就不能储人了.
      

  5.   

    如果储人的图片大于20K以上时,就提示:  ORA-01460: unimplemented or unreasonable conversion requested
      

  6.   

    你把这段代码:
      //读取页面图片
      FileStream fs = new FileStream(@url, FileMode.Open, FileAccess.Read);//读取D盘c.jpg转换为数据流
      byte2 = new byte[fs.Length];
      fs.Read(byte2, 0, Convert.ToInt32(fs.Length));
      fs.Close();
        改成下面的试试:
        Image img = Image.FromFile(@"c:\test.jpg");
        MemoryStream ms = new MemoryStream();
        img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        byte[] myData = ms.ToArray();
      

  7.   

    谢谢~
    不过效果是一样的,只能上传小图片到数据库.大图片还是提示: unimplemented or unreasonable conversion requested
     
     
      

  8.   

    有人说下载新的Oracle jdbc驱动包,然后把JDK更新到1.6,可以解决,不知受否可行??
      

  9.   

    这些代码在Sql server插入过的,感觉跟oracle某些设置有关
      

  10.   

    问题已解决了:
    主要办法是,先把Byte[]数组转换到OracleBlob类型的对象.
    参考代码如下:
    OracleConnection conn = new OracleConnection(
      "server=test8172; integrated security=yes;");
    conn.Open();OracleTransaction tx = conn.BeginTransaction();OracleCommand cmd = conn.CreateCommand();
    cmd.Transaction = tx;
    cmd.CommandText = 
      "declare xx blob; begin dbms_lob.createtemporary(
      xx, false, 0); :tempblob := xx; end;";
    cmd.Parameters.Add(new OracleParameter("tempblob",
      OracleType.Blob)).Direction = ParameterDirection.Output;
    cmd.ExecuteNonQuery();
    OracleLob tempLob = (OracleLob)cmd.Parameters[0].Value;
    tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
    tempLob.Write(tempbuff,0,tempbuff.Length);
    tempLob.EndBatch();
    cmd.Parameters.Clear();
    cmd.CommandText = "myTable.myProc";
    cmd.CommandType = CommandType.StoredProcedure;  
    cmd.Parameters.Add(new OracleParameter(
      "ImportDoc", OracleType.Blob)).Value = tempLob;
    cmd.ExecuteNonQuery();tx.Commit();