Asp.net mvc 我在使用asp.net mvc web api读取Oracle表时遇到了严重错误(数据类型为CLOB)

Asp.net mvc 我在使用asp.net mvc web api读取Oracle表时遇到了严重错误(数据类型为CLOB),asp.net-mvc,oracle,entity-framework,asp.net-web-api,Asp.net Mvc,Oracle,Entity Framework,Asp.net Web Api,如果没有数据类型是CLOB,我可以很容易地读取Oracle表数据,但不幸的是,当某些表具有数据类型的CLOB时,我确实遇到了一个严重的问题,我该怎么做呢 错误消息 {“$id”:“1”,“消息”:“发生错误”,“异常消息”:“ “ObjectContent1”类型未能序列化的响应正文 内容类型'application/json; charset=utf-8.,“ExceptionType”:“System.InvalidOperationException”,“StackTrace”:null,

如果没有数据类型是CLOB,我可以很容易地读取Oracle表数据,但不幸的是,当某些表具有数据类型的CLOB时,我确实遇到了一个严重的问题,我该怎么做呢

错误消息

{“$id”:“1”,“消息”:“发生错误”,“异常消息”:“ “ObjectContent
1”类型未能序列化的响应正文
内容类型'application/json;
charset=utf-8.,“ExceptionType”:“System.InvalidOperationException”,“StackTrace”:null,“InnerException”:{“$id”:“2”,“$type”:“System.Web.Http.HttpError,
Http“,”消息“:”出现错误
已发生。“,“ExceptionMessage”:“类型的异常”
“System.OutOfMemoryException”为
抛出“”,“ExceptionType”:“System.OutOfMemoryException”,“StackTrace”:
位于System.String.Concat(字符串str0,字符串str1)\r\n位于
OracleInternal.I18N.Conv.ConvertBytesToString(IList
1字节,Int32 字节偏移量,Int32字节计数,字符[]字符,布尔值 BuserReplacementChar)\r\n位于 OracleInternal.I18N.Conv.ConvertBytesToString(IList
1字节,Char[]
字符,布尔BuserReplacementChar)\r\n位于
OracleInternal.ServiceObjects.OracleClobImpl.GetCompleteClobData(Int32
currentRow,Int32 columnIndex,OracleConnectionImpl connImpl,字节[]
lobLocator、DataUnmarshaller DataUnmarshaller、TTCLobAccessor
lobAccessor,OracleClobImpl&oraClobImpl)\r\n位于
Oracle.ManagedDataAccess.Client.OracleDataReader.GetString(Int32
i) \r\n在lambda\u方法(闭包、整形器)处\r\n在
System.Data.Entity.Core.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func
2 constructEntityDelegate、EntityKey、EntityKey、EntitySet-EntitySet)\r\n 在lambda\u方法(闭包、整形器)处\r\n在 System.Data.Entity.Core.Common.Internal.Materialization.Coordinator
1.ReadNextElement(Shaper
整形器)\r\n位于
System.Data.Entity.Core.Common.Internal.Materialization.Shaper
1.SimpleNumerator.MoveNext()\r\n 位于System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()\r\n位于 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter 编写器,IEnumerable值,JsonArrayContract合同,JsonProperty 成员,JsonContainerContract集合合同,JsonProperty containerProperty)\r\n位于 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializationValue(JsonWriter 编写器,对象值,JsonContract valueContract,JsonProperty成员, JsonContainerContract集装箱合同,JsonProperty containerProperty)\r\n位于 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serializate(JsonWriter jsonWriter,对象值,类型objectType)\r\n位于 Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter,对象值,类型objectType)\r\n位于 序列化(JsonWriter JsonWriter,对象 值)\r\n位于 System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(类型 类型、对象值、流写入流、编码 有效编码)\r\n位于 System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream(类型 类型、对象值、流写入流、编码 有效编码)\r\n位于 System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(类型 类型、对象值、流写入流、HttpContent内容\r\n位于 System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync(类型 类型、对象值、流writeStream、HttpContent、, TransportContext TransportContext,CancellationToken cancellationToken)\r\n---来自上一个位置的堆栈结束跟踪 引发异常的位置---\r\n System.Runtime.CompilerServices.TaskWaiter.ThrowForNonSuccess(任务 任务)\r\n位于 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n位于 System.Runtime.CompilerServices.TaskWaiter.GetResult()\r\n位于 System.Web.Http.WebHost.HttpControllerHandler.d_u1b.MoveNext()“}

附言: 环境
1.Visual Studio 2015
2.ASP.NET MVC WebApi(实体框架)
3.Oracle 11G
4.使用VS默认Web API项目

“类型的例外 “System.OutOfMemoryException”为 扔。”

我猜你的CLOB对象太大,无法转换。它有多大?在程序执行期间检查可用内存。你有足够的空闲内存吗

根据Oracle社区的回答,当涉及CLOB时,.net驱动程序中似乎存在一些问题;我发现的一个建议是尝试将CLOB解析为一般BLOB,并将其读取为byte[]。然后可以将字节[]转换为如下所示的字符串


string result=System.Text.Encoding.UTF8.GetString(byteArray)

您好,您是否错过了一些组件,您可以检查更新到最新版本的nuget,如Entity framework/Oracle等。我已经更新了我项目中的所有最新稳定版本谢谢,您说得对,内存被抛出。很抱歉再次打扰,事实上CLOB数据没有太多数据,对于所有的数据容量只有6MB,但我的内存有4G的虚拟机,你有什么想法,谢谢again@Luca是的,我有同样的问题,你有什么建议吗,谢谢。我用我在oracle社区网站上找到的一些信息更新了答案。也许值得一试。