0
所以,我正在使用web api来检索图像!但是,在DB上,图像是一个LongRaw。林看到的,我需要使用OracleDbType.Blob 但是,当我尝试用这个谷歌,从Oracle数据库检索图像
public IEnumerable<FotoEnvolvido> GetFoto(string suspid)
{
DataSet lretorno = new DataSet();
string connectionString = GetConnectionString();
using (OracleConnection connection = new OracleConnection())
{
connection.ConnectionString = connectionString;
OracleDataReader reader = null;
OracleCommand cmd = new OracleCommand();
cmd.InitialLONGFetchSize = 50000;
cmd.Connection = connection;
cmd = new OracleCommand("MOBILE.XAPIMANDADOMOBILE.BUSCAFOTO", connection);
cmd.CommandType = CommandType.StoredProcedure;
//variáveis entrada
cmd.Parameters.Add(new OracleParameter("SUSPID", suspid));
//variáveis de saida
cmd.Parameters.Add(new OracleParameter("oretorno", OracleDbType.Blob)).Direction = ParameterDirection.Output;
connection.Open();
cmd.ExecuteNonQuery();
OracleDataAdapter da = new OracleDataAdapter(cmd);
da.Fill(lretorno);
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
//CRIO A LISTA
lretorno.Load(reader, LoadOption.OverwriteChanges, "BUSCAFOTO");
connection.Close();
connection.Dispose();
var teste = lretorno.Tables[0].AsEnumerable().Select(row => new FotoEnvolvido
{
FOTO = (byte[])(row["FOTO"]),
});
return teste;
}
}
我有cmd.ExecuteNonQuery()一个错误:
"ORA-06550: linha 1, coluna 7:\nPLS-00306: número errado ou tipos de argumentos na chamada para 'BUSCAFOTO'\nORA-06550: linha 1, coluna 7:\nPL/SQL: Statement ignored"
Oracle.ManagedDataAccess.Client.OracleException was unhandled by user code
DataSource=""
ErrorCode=-2147467259
HResult=-2147467259
IsRecoverable=false
Message=ORA-06550: linha 1, coluna 7:
PLS-00306: número errado ou tipos de argumentos na chamada para 'BUSCAFOTO'
ORA-06550: linha 1, coluna 7:
PL/SQL: Statement ignored
Number=6550
Procedure=""
Source=Oracle Data Provider for .NET, Managed Driver
StackTrace:
em OracleInternal.ServiceObjects.OracleCommandImpl.VerifyExecution(OracleConnectionImpl connectionImpl, Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone)
em OracleInternal.ServiceObjects.OracleCommandImpl.VerifyExecution(OracleConnectionImpl connectionImpl, Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, OracleException& exceptionForArrayBindDML, Boolean bFirstIterationDone)
em OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteNonQuery(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, Int64[]& scnFromExecution, OracleParameterCollection& bindByPositionParamColl, Boolean& bBindParamPresent, OracleException& exceptionForArrayBindDML, Boolean isFromEF)
em Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQuery()
em WebApiApp.Controllers.FotoController.GetFoto(String suspid) na C:\Users\50216740\Documents\Visual Studio 2015\Projects\AppMobilePCRJ\AppMobilePCRJ\WebApiApp\Controllers\FotoController.cs:linha 49
em lambda_method(Closure , Object , Object[])
em System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)
em System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)
em System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)
InnerException:
如果我使用OracleDbType.RefCursor像其他Web apis我得到的字符串,不要给我这个错误...问题是,参数[{“ISUSPID”:0,“FOTO”:“”}]],即使在DB上给我带来的形象!
我是什么doind错了,那该FOTO是空的JSON的???
对不起慢!!并感谢您的答案... 但谁是参数“blob”?您所使用blob.Lenght –
哎呀,我会更新现在@MarceloCFernandes – xer21
,你可以从你得到了Oracle BLOB对象,它可以告诉你的BLOB的长度,然后该对象还具有读取功能来填充读者看到一个字节数组 – xer21