如题,
我使用Byte[]  byteImg=new Byte[]; OracleParameter par_barcode = new OracleParameter("barcode", OracleType.Blob, byteImg.Length);
            par_barcode.Value = byteImg;提示ORA-00913 值过多

解决方案 »

  1.   

    字段设置什么类型如果不是BLOB 改成 BLOB 再试一下吧
      

  2.   


    首先把要插进数据库BLOB类型字段的数据转换成二进制流,然后使用如下方法更新到数据库中
            public int UpdateList(List<string> sqlList,List<OracleParameter> paramlist,byte[] byteImg,ref string msg)
            {
                if (sqlList == null || sqlList.Count == 0 || false == connOpen())
                {
                    return -1;
                }
                OracleTransaction sqlTran = conn.BeginTransaction();
                OracleCommand sqlCom = conn.CreateCommand();            sqlCom.Transaction = sqlTran;            //处理二进制数据
                sqlCom.CommandText = "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end;";
                sqlCom.Parameters.Add(new OracleParameter("tempblob", OracleType.Blob)).Direction = ParameterDirection.Output;
                sqlCom.ExecuteNonQuery();            OracleLob tmpLob = (OracleLob)sqlCom.Parameters[0].Value;
                tmpLob.BeginBatch(OracleLobOpenMode.ReadWrite);
                tmpLob.Write(byteImg, 0, byteImg.Length);
                tmpLob.EndBatch();
                //
                int affRow = 0;            OracleParameter param = new OracleParameter("barcode", tmpLob);
                sqlCom.Parameters.Clear();
                sqlCom.Parameters.Add(param);
                            try
                {
                    for (int i = 0; i < sqlList.Count; i++)
                    {
                        sqlCom.CommandText = sqlList[i];
                        int row = sqlCom.ExecuteNonQuery();
                        sqlCom.Parameters.Clear();
                        if (row > 0)
                            affRow += row;
                    }
                    sqlTran.Commit();
                }
                catch (Exception e)
                {
                    msg = e.Message;
                    sqlTran.Rollback();
                    affRow = -1;
                }
                finally
                {
                    sqlCom.Dispose();
                    sqlTran.Dispose();
                    connClose();
                }            return affRow;
            }