Csharp/C#教程:从Oracle DB检索图像分享


从Oracle DB检索图像

所以,我正在使用web api来检索图像!! 但是,在DB处,图像是LongRaw。 我在谷歌看到我需要使用OracleDbType.Blob但是,当我尝试使用它时,

public IEnumerable 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:Users50216740DocumentsVisual Studio 2015ProjectsAppMobilePCRJAppMobilePCRJWebApiAppControllersFotoController.cs:linha 49 em lambda_method(Closure , Object , Object[] ) em System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.c__DisplayClass10.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: 

如果我像其他web apis一样使用OracleDbType.RefCursor我得到字符串,不要给我这个错误…问题是参数来了[{“ISUSPID”:0,“FOTO”:“”}],即使在DB上带给我的图像!

我错了什么,那就是JSON上的FOTO是空的???

我不确定lretorno.Load(…)正在做什么来读取数据,但这个使用select语句的sudo代码示例可能会帮助你…我总是必须专门获取blob并将其读出来得到过去的字节。

检索LONG RAW DataType的示例

 var imgCmd = new OracleCommand("SELECT photo FROM photos WHERE photo_id = 1", _con); imgCmd.InitialLONGFetchSize = -1; // Retrieve the entire image during select instead of possible two round trips to DB var reader = imgCmd.ExecuteReader(); if (reader.Read()) { // Fetch the LONG RAW OracleBinary imgBinary = reader.GetOracleBinary(0); // Get the bytes from the binary obj byte[] imgBytes = imgBinary.IsNull ? null : imgBinary.Value; } reader.Close(); 

检索BLOB DataType的示例

上述就是C#学习教程:从Oracle DB检索图像分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 var imgCmd = new OracleCommand("SELECT photo FROM photos WHERE photo_id = 1", _con); var reader = imgCmd.ExecuteReader(); if (reader.Read()) { // Fetch the blob OracleBlob imgBlob = reader.GetOracleBlob(0); // Create byte array to read the blob into byte[] imgBytes = new byte[imgBlob.Length]; // Read the blob into the byte array imgBlob.Read(imgBytes, 0, imgBlob.Length); } reader.Close(); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/984522.html

(0)
上一篇 2021年12月20日
下一篇 2021年12月20日

精彩推荐