1

I am facing an strange issue in asp.net mvc website that is connected with oracle database and deployed on IIS. When I am adding a new field in oracle database table (without changing anything in existing table structure), asp.net website running on IIS throwing exception in the method that is retrieving data from that table.

I am simply adding a new field in oracle database table using Oracle SQL Developer. I can understand that table schema is getting changed in this way, but not able to understand how does its effecting on existing sql query results. I tried to do same-thing in SQL Server database, but it works perfectly fine.

Below is the code that is displaying data from oracle database. Getting exception at line having code "sda.Fill(dt);"

 using Oracle.ManagedDataAccess.Client;

 OracleConnection Ocon = null;   
 string oradb = System.Configuration.ConfigurationManager.ConnectionStrings["OracleDBConnStr"].ConnectionString;
Ocon = new Oracle.ManagedDataAccess.Client.OracleConnection(oradb); 
string str = "select * from TABLE_NAME where  TRIM(STATUS)!=1 and TRIM(STATUS)!=2";
OracleDataAdapter sda = new OracleDataAdapter(str, Ocon);
DataTable dt = new DataTable();
sda.Fill(dt);

Server Error in '/' Application.

Index was outside the bounds of the array.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.<br>
Exception Details: System.IndexOutOfRangeException: Index was outside the bounds of the array.<br>
Source Error: <br>
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.<br>
Stack Trace: <br>
[IndexOutOfRangeException: Index was outside the bounds of the array.]
   Oracle.ManagedDataAccess.Client.OracleDataReader.GetMinSchemaTable() +3066
   Oracle.ManagedDataAccess.Client.OracleDataReader.set_IsFillReader(Boolean value) +102
   Oracle.ManagedDataAccess.Client.OracleDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) +376
   System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) +141
   TradingAutomationUI.Controllers.OtherAccountTransactionController.getbankTransectionCustom(String Query, String searchPerm) +255
   TradingAutomationUI.Controllers.OtherAccountTransactionController.CustomEntriesView(Nullable`1 id) +347
   lambda_method(Closure , ControllerBase , Object[] ) +145
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +229
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +35
   System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +39
   System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +77
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +42
   System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +72
   System.Web.Mvc.Async.<>c__DisplayClass48.<InvokeActionMethodFilterAsynchronouslyRecursive>b__41() +387
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +42
   System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +38
   System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +188
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +38
   System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +73
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +52
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +39
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +38
   System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +43
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +73
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +38
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +602
   System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +195
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +128<br>
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.7.3282.0
ramya
  • 2,350
  • 6
  • 31
  • 57
  • Possible duplicate of [What is an IndexOutOfRangeException / ArgumentOutOfRangeException and how do I fix it?](https://stackoverflow.com/questions/20940979/what-is-an-indexoutofrangeexception-argumentoutofrangeexception-and-how-do-i-f) – gunr2171 Jun 20 '19 at 15:13
  • @gunr2171 I checked that question although error looks the same but all those answers are not satisfying scenario that i explained. In my case its happening when I am adding a new field in oracle db table without making changes in existing structure. – ramya Jun 20 '19 at 15:22
  • can you check inside method getbankTransectionCustom, is there any array or list inside it? – Hien Nguyen Jun 20 '19 at 15:39
  • 3
    You've posted an error dump and are asking us to debug code we can't see, using a database we can't access, with little more to go on than "...but it works in SQL Server". ??? – Bob Jarvis - Слава Україні Jun 20 '19 at 20:49
  • Do you use entity framework? And post this code `getbankTransectionCustom`. No code... no help – T.S. Jun 20 '19 at 21:20
  • Share some code snipets and write more clear the problem details. I couldnt understand your sentence "not even referenced" where which you expecting Why? – Hamit YILDIRIM Jun 20 '19 at 21:34
  • @HienNguyen, "getbankTransectionCustom" method simply retrieves data from oracle database, its source code I updated above. – ramya Jun 21 '19 at 06:58
  • @BobJarvis, i updated code above, its simply retrieving data from oracle database. I just replicated this issue in sql server where adding a new field in database doesn't throw any kind of exception like this in running application on IIS. – ramya Jun 21 '19 at 07:02
  • @T.S. I am not using entity framework. I updated source code above of "getbankTransectionCustom" – ramya Jun 21 '19 at 07:05
  • @chmod I shared code snippet above, its simply retrieves data from oracle database table. I also updated the problem description. – ramya Jun 21 '19 at 07:11
  • @yadavr i seen Ocon that is connection is null before the OracleDataAdapter. is this code missing? – Hamit YILDIRIM Jun 21 '19 at 07:23
  • @chmod I just updated source code, its not null, its set with connection string – ramya Jun 21 '19 at 11:21
  • So you're modifying the table while a web app which accesses it is running? I'm somewhat surprised the DDL didn't get blocked. I suggest you restart the web server. – Bob Jarvis - Слава Україні Jun 21 '19 at 11:40
  • 1
    This is my thought.. If what you say is holding true - this must be a bug in Oracle Managed. Try this. 1-Run app successfully, 2-change table, 3-run again to confirm it fails, 4-Restart app pool, 5-do step #1. If step #5 success - I suspect something is cached in Oracle managed. Use tool like dotPeek to disassemble and look into `OracleDataReader.GetMinSchemaTable()`. Do they cache something in there? I understand, it runs in SQL server - for sql server you use SqlClient, which is different software. Yea, and if I said "this is a bug" Oracle may argue it was performance inhancement – T.S. Jun 21 '19 at 14:12

0 Answers0