Error de C# al intentar conectarse a MySql usando MySql.Data

3 minutos de lectura

avatar de usuario de monolith_code
código_monolito

ASUNTO

Al intentar conectarme a maria db usando mysql.data, aparece este error:

System.IndexOutOfRangeException: Index was outside the bounds of the array.
  at System.Diagnostics.TraceInternal.get_AppName () [0x0000e] in <e804fc8285a9419784599893ed028695>:0
  at System.Diagnostics.TraceInternal.TraceEvent (System.Diagnostics.TraceEventType eventType, System.Int32 id, System.String format, System.Object[] args) [0x0003d] in <e804fc8285a9419784599893ed028695>:0
  at System.Diagnostics.Trace.TraceError (System.String message) [0x00000] in <e804fc8285a9419784599893ed028695>:0
  at MySql.Data.MySqlClient.MySqlTrace.LogError (System.Int32 id, System.String msg) [0x00026] in <89b4d3936e0b4e49b8d299ddbfe7933d>:0
  at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver () [0x0002e] in <89b4d3936e0b4e49b8d299ddbfe7933d>:0
  at MySql.Data.MySqlClient.MySqlPool.GetConnection () [0x0001c] in <89b4d3936e0b4e49b8d299ddbfe7933d>:0
  at MySql.Data.MySqlClient.MySqlConnection.Open () [0x00245] in <89b4d3936e0b4e49b8d299ddbfe7933d>:0
  at MyResource.Server.ServerMain..ctor () [0x00026] in C:\Users\Maurice\CFX\MyResource\Server\ServerMain.cs:23
Done.

El archivo .dll se compiló con dotnet build bajo debian 10 sin advertencias ni errores

INTENTÓ:

Quiero conectarme a la base de datos sql (MariaDB) a través de C# y MySql.Data de Oracle.

Primero creé una carpeta con el script C# y las .dll del paquete MySql.Data.

Después de eso, agregué la referencia al .proj:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <DebugType>portable</DebugType>
    <TargetName>ServerMain.net</TargetName>
    <DefineConstants>SERVER</DefineConstants>
    <AssemblyName>TEST.Server.net</AssemblyName>
  </PropertyGroup>
    <ItemGroup>
      <Reference Include="MySql.Data">
        <HintPath>MySql.Data.DLL</HintPath>
      </Reference>
    </ItemGroup>
</Project>
  

Para compilar el proyecto, utilicé Visual Studio Code SSH Connection para ejecutarlo en vsc Terminal: dotnet build.

RESULTADO:

Se inició correctamente el script con la salida de prueba, pero después de SQL Connection Open (), se arrojó el error como se ve arriba.

MI CÓDIGO:

using System;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;

namespace TEST.Server
{
    public class ServerMain : BaseScript
    {
        public static void DBTEST()
        {
            var connString = "server=localhost;user=NAME;database=NAME;port=3306;password=*****";
            MySqlConnection conn = new MySqlConnection(connString);
            try
            {
                Console.WriteLine("Connecting to MySQL...");
                conn.Open();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }

        public ServerMain()
        {
            DBTEST();
        }
    }
}

  • ¿La base de datos MariaDB está en la misma máquina desde la que está ejecutando el código?

    –Michael Buckman

    7 de febrero a las 19:58


  • @MichaelBuckman Sí, está alojado en la máquina local

    – código_monolito

    7 feb a las 22:31

  • Probablemente se trate de una falta de coincidencia del marco: no puede ejecutar ensamblajes creados para .NET Framework en .NET Core y viceversa (excepto en circunstancias especiales). Normalmente, esto se resuelve no compilando contra un ensamblado directamente, sino contra un paquete NuGet que obtendrá automáticamente los ensamblados apropiados para el marco.

    – Jeroen Mostert

    8 de febrero a las 11:08

  • @JeroenMostert Gracias, también probé esto, ahora obtengo el nuevo error que actualicé en la publicación

    – código_monolito

    8 de febrero a las 19:36


¿Ha sido útil esta solución?