如题,
我使用Byte[] byteImg=new Byte[]; OracleParameter par_barcode = new OracleParameter("barcode", OracleType.Blob, byteImg.Length);
par_barcode.Value = byteImg;提示ORA-00913 值过多
我使用Byte[] byteImg=new Byte[]; OracleParameter par_barcode = new OracleParameter("barcode", OracleType.Blob, byteImg.Length);
par_barcode.Value = byteImg;提示ORA-00913 值过多
首先把要插进数据库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;
}