none
Indice fuera de los limites de la matriz RRS feed

  • Pregunta

  • Buenos días señores.... en esta ocasión quiero solicitar su ayuda para resolver el siguiente problema que me trae con dolores de cabeza. Estos es:

    Estoy modificando una aplicación Vb.Net con Visual Studio 2010 en una maquina con Win7 de 64bits, en ambiente Cliente-Servidor y Base de Datos Oracle... la aplicación originalmente estaba en Visual Studio 2008, y al querer compilar, me daba varios advertencias (Warnings).  que pude resolver, instalando el Oracle Data Provider (ODP.net) y modificando las variables de conexión en el código fuente.... ahora compilo sin errores ni advertencias, pero al momento de ejecutar la aplicación de da el error: "Se produjo una excepción en el inicializador de tipo de 'OracleInternal.Common.ProviderConfig'... la aplicación no logra conectarse a la BD.... luego trato de hacer una nueva conexión y cuando hago la prueba de conexión con el Data Source: Oracle Database (ODP.NET, Managed Driver).. me dice: "Indice fuera de los limites de la matriz"....

    Estoy totalmente perdido en este problema, ya que para ser sincero... esto de conexiones a BD, lo poco que se, lo he hecho a través de consultas en este foro y "googleando".... soy bastante novato con esto, por eso la necesidad de su ayuda....

    Gracias de antemano y espero que me puedan dar una mano.... cualquier duda, estoy a la orden.

    jueves, 25 de junio de 2015 19:11

Respuestas

  • Si quitas 

    OraCon = New OracleConnection

     Al querer abrir no eoncontrara la conexion por eso marca error en el open, ahora bienn cuando dejas linea te marca Se produjo una excepción en el inicializador.

    Esa excepcion no es de Oracle, debe ser de ASP,  quiza no lei el hilo completo, pero es correcta la version de tu dll de Oracle?

    y si pones esto 

    OraCon = New OracleConnection()

    en vez de esto

    OraCon = New OracleConnection

    que te sale?


    Si mi respuesta fue útil ayudame marcándola como correcta.

    viernes, 26 de junio de 2015 19:51

Todas las respuestas

  • El error que te devuelve no  es de falta de conexion a Oracle, es mas bien que alguna de tus consultas, quiza la primera que haces o algunas de las primeras tiene algun dato que se sale dell tamaño  quiza de un dataset, de un dropdownnlist algo asi

    Si mi respuesta fue útil ayudame marcándola como correcta.

    jueves, 25 de junio de 2015 21:42
  • Gracias por responder PIO... fíjate que al querer correr la aplicación el error es este: "Se produjo una excepción en el inicializador de tipo de 'OracleInternal.Common.ProviderConfig'".... y es en esta linea: 

    OraCon = New OracleConnection (OraCon es una variable de tipo OracleConnection).

    El otro error que me da (Indice fuera de la matriz), me da cuando quiero  crear un "Service-basedDataBase" (en "Add New Item").

    Antes de hacer la conversion a ODP.Net, estos errores no daban....

    Gracias de nuevo y espero haberte dado mas insumos para análisis...

    jueves, 25 de junio de 2015 21:57
  • como tienes definido tu App.config o web.config??

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 25 de junio de 2015 22:11
  • Este es mi App.config

    <?xml version="1.0"?>
    <configuration>
        <system.diagnostics>
            <sources>
                <!-- This section defines the logging configuration for My.Application.Log -->
                <source name="DefaultSource" switchName="DefaultSwitch">
                    <listeners>
                        <add name="FileLog"/>
                        <!-- Uncomment the below section to write to the Application Event Log -->
                        <!--<add name="EventLog"/>-->
                    </listeners>
                </source>
            </sources>
            <switches>
                <add name="DefaultSwitch" value="Information"/>
            </switches>
            <sharedListeners>
                <add name="FileLog" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" initializeData="FileLogWriter"/>
                <!-- Uncomment the below section and replace APPLICATION_NAME with the name of your application to write to the Application Event Log -->
                <!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> -->
            </sharedListeners>      
        </system.diagnostics>
      <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0"/>
      </startup>
      <configSections>
        <section name="oracle.dataaccess.client"
          type="System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </configSections>
    <!-- <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration> -->
    </configuration>

    jueves, 25 de junio de 2015 22:22
  • hola, y donde estableces la caden de conexión a tu Oracle?te falta definir la section oracle.dataaccess.client

    ejemplo

    <oracle.dataaccess.client>
       <settings>
         <add name="DbNotificationPort" value="-1"/>
         <add name="DllPath" value="C:\app\user\product\11.1.0\client_1\bin"/>
         <add name="DynamicEnlistment" value="0"/>
         <add name="FetchSize" value="65536"/>
         <add name="MetaDataXml" value="CustomMetaData.xml"/>
         <add name="PerformanceCounters" value="4095"/>
         <add name="PromotableTransaction" value="promotable"/>
         <add name="StatementCacheSize" value="50"/>
         <add name="ThreadPoolMaxSize" value="30"/>
         <add name="TraceFileName" value="c:\odpnet2.trc"/>
         <add name="TraceLevel" value="0"/>
         <add name="TraceOption" value="0"/>
     
       </settings>
     </oracle.dataaccess.client>
    


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 25 de junio de 2015 22:51
  • Supongo que es esta parte:

    <configSections>
        <section name="oracle.dataaccess.client"
          type="System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </configSections>

    Pero de todas maneras, voy a probar poner lo que tu has escrito.... voy a sustituir esas lineas por las tuyas.

    De nuevo gracias Sergio

    jueves, 25 de junio de 2015 22:59
  • No no... Deben estar esas que has mostrado. Esas lineas significan que en el archivo de configuración va a existir una sección personalizada llamada Oracle.datacces.client

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 25 de junio de 2015 23:01
  • Ya coloque los cambios que me sugirió Sergio y por lo menos, ya no da error en la linea:

    OraCon = New OracleConnection

    Ahora el error lo tengo en esta linea (que es la linea siguiente a la que escribí anteriormente):

    OraCon.ConnectionString = ObtenerStrCon()

    ObtenerStrCon() es esto: 

    Public Function ObtenerStrCon() As String
            ''Desencriptando y leyendo de ini
            Dim User As String, Pass As String, NetS As String
    
            User = DesEncriptar(Mini.IniGet(Inifile, "DataBase", "user", "valor"))
            Pass = DesEncriptar(Mini.IniGet(Inifile, "DataBase", "pass", "valor"))
            NetS = Mini.IniGet(Inifile, "DataBase", "DBQ", "valor")
            ''Forma el string de conexion 
    
            ObtenerStrCon = "Data Source=" & NetS & ";User ID=" & User & ";PWD=" & Pass & ";Unicode=true"
        End Function

    Y el error que me da es: 'pwd' es un atributo de cadena de conexion no valido.

    He hecho un debug a la funcion y esta si crea adecuadamente el String.

    Gracias una vez mas...

    jueves, 25 de junio de 2015 23:10
  • ok. Deberías realizar una cadena de conexión para Oracle como,se indica aqui.

    https://www.connectionstrings.com/oracle-data-provider-for-net-odp-net/

    como,ves el atributo es Password y no PWD


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    jueves, 25 de junio de 2015 23:13
  • Gracias Sergio... y no se si voy progresando o que... pero ahora el error es en la linea donde abre la base de datos (Open, la tercera linea de lo que adjunto)

    OraCon = New OracleConnection
    OraCon.ConnectionString = ObtenerStrCon()
    OraCon.Open()

    Y el error es el que me da cuando trato de crear una nueva conexión, o sea: "Indice fuera de los limites de la matriz".

    Gracias una vez mas...

    jueves, 25 de junio de 2015 23:28
  • Aqui te comparto el formato que yo uso para la cadena Oracle espero te sea util

     <add key="tu_nombre_de_cadena" value="user id=tu_id;password=tu_password;data source=tu_bd;persist security info=False;" />


    Si mi respuesta fue útil ayudame marcándola como correcta.

    jueves, 25 de junio de 2015 23:55
  • Donde coloco esta cadena ???... en el codigo de la aplicacion o en App.Config ??

    Disculpas por la pregunta ??

    Gracias y continuo mañana ya que estoy en el trabajo y ya es hora de salida.

    viernes, 26 de junio de 2015 0:01
  • Gracias señores por su ayuda.... he puesto la cadena que me ha sugerido PIO, pero el error persiste ("Excepcion en el inicializador de tipo....").. la cadena la puse asi: 

    <add key="StrConexion" value="user id=dhunt;password=password;data source=DHUNT;persist security info=False;" />

    Y esta en el App.Config

    Gracias de nuevo

    viernes, 26 de junio de 2015 17:20
  • Por mera duda, configuras tu listener a la base de datos en netmanager? quiza la base de datos que indicas no existe en tu netmanager y por eso dice que se sale de la matriz, quiza por eso no la reconoce. 

    De igual manera te adjunto el codigo que yo uso para conexion a oracle.

     Public Function Consultar_datos_vehiculo(ByVal no_economico As String) As DataSet

                Dim ds As New DataSet
                Dim cnn As New OracleConnection
                Dim query As String

                cnn.ConnectionString = ConfigurationManager.AppSettings("Ora_conexion")

                Dim OraCom As New OracleCommand

                query = " tu consulta '"

                Try

                    OraCom.Connection = cnn
                    OraCom.CommandType = CommandType.Text
                    OraCom.CommandText = query

                    OraCom.Connection.Open()

                    Dim sda As New OracleDataAdapter(OraCom)
                    sda.Fill(ds)

                    OraCom.Connection.Close()
                    OraCom.Dispose()

                Catch ex As Exception

                    If OraCom.Connection.State = ConnectionState.Open Then
                        OraCom.Connection.Close()

                    End If

                End Try

                Return ds

            End FunctionSi te sirve marcalo bro


    Si mi respuesta fue útil ayudame marcándola como correcta.

    viernes, 26 de junio de 2015 17:59
  • Gracias por tu respuesta PIO... y pido disculpas si no soy muy diestro en esto.... creo haber entendido lo que me dijiste con esto: "configuras tu listener a la base de datos en netmanager? "... y por eso he borrado la linea que me diste para colocar en el App.Config.... ya que yo tengo al usuario de bd y el password, encriptado y utilizo una función para obtener la cadena de conexión... esta es:

    Public Function ObtenerStrCon() As String
            ''Desencriptando y leyendo de ini
            Dim User As String, Pass As String, NetS As String
    
            User = DesEncriptar(Mini.IniGet(Inifile, "DataBase", "user", "valor"))
            Pass = DesEncriptar(Mini.IniGet(Inifile, "DataBase", "pass", "valor"))
            NetS = Mini.IniGet(Inifile, "DataBase", "DBQ", "valor")
            ''Forma el string de conexion 
    
            ObtenerStrCon = "Data Source=" & NetS & ";User ID=" & User & ";Password=" & Pass & ";"
        End Function

    Esta función es llamada desde aquí:

    Public Function OpenDB() As Boolean
            Try
                OraCon = New OracleConnection
                OraCon.ConnectionString = ObtenerStrCon()
                OraCon.Open()
                'OpenDB = True
                StrSql = "alter session set nls_date_format = 'DD/MM/YYYY'"
                'Dim Cmd As New OracleCommand(StrSql, OraCon)
                Dim Cmd = OraCon.CreateCommand()
                Cmd.CommandText = StrSql
                OraDataReader = Cmd.ExecuteReader
            Catch ex As Exception
                MsgBox("No se pudo abrir base de datos por: " & ex.Message & "", MsgBoxStyle.Critical, NomApp)
                OpenDB = False
            End Try
        End Function

    cuando he puesto lo que me dijiste en el App.Config... el error me lo marca en la linea: 

    OraCon = New OracleConnection

    con el mensaje: "Se produjo una excepción en el inicializador...." etc.... pero cuando quito esas lineas y lo dejo con las modificaciones iniciales... el error me lo presenta en esta linea: 

    OraCon.Open()

    dandome el error: "Indice fuera de los limites de la matriz"... como ves, el problema es cuando quiere abrir la bd...

    Un saludo y muchas gracias de nuevo


    • Editado wichortiz viernes, 26 de junio de 2015 18:22
    viernes, 26 de junio de 2015 18:21
  • Si quitas 

    OraCon = New OracleConnection

     Al querer abrir no eoncontrara la conexion por eso marca error en el open, ahora bienn cuando dejas linea te marca Se produjo una excepción en el inicializador.

    Esa excepcion no es de Oracle, debe ser de ASP,  quiza no lei el hilo completo, pero es correcta la version de tu dll de Oracle?

    y si pones esto 

    OraCon = New OracleConnection()

    en vez de esto

    OraCon = New OracleConnection

    que te sale?


    Si mi respuesta fue útil ayudame marcándola como correcta.

    viernes, 26 de junio de 2015 19:51
  • Muchas gracias señores y le pido disculpas por haber retrasado este post, pero lamentablemente cai enfermo de la Chingunkuya (o como se escriba)... y me dejo varios días en cama y sin poder venir a trabajar.... pero aquí estoy de nuevo y espero que me sigan apoyando para encontrar este error....

    PIO, he puesto lo que me has dicho y sigue el error de: "Indice fuera de los limites de la matriz"...  siempre en la linea que trata de abrir la bd.... sigo como al principio... espero que me puedan seguir ayudando..

    Muchas gracias...

    lunes, 6 de julio de 2015 18:12
  • Yo estoy programando en c# y tengo exactamente el mismo problema al momento de abrir la conexión. 

    Hay manera de desactivar este tipo de excepción a ver que pasa?

    Saludos.

    Muchas gracias a todos

    jueves, 6 de julio de 2017 21:28