Forum: Mikrocontroller und Digitale Elektronik Raspberry Pi 2 Mono .Net MySqlConncetor Fehler!


von bass (Gast)


Lesenswert?

Hallo,

ich habe auf dem Raspberry Pi 2 Mono

(Mono JIT compiler version 3.2.8 (Debian 3.2.8+dfsg-4+rpi1) installiert 
und auch eine KonsolenApplication mit Datenbank anbindung (MySql) 
geschrieben.

Ich habe die .exe und die MySql.Data.dll System.Data.dll auf den 
Raspberry kopiert.

Wenn ich die exe mit #mono test.exe starte erhalte ich folgenden Fehler:

Unhandled Exception:
System.IO.FileNotFoundException: Could not load file or assembly 
'System.Data, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089' or one of its dependencies.
File name: 'System.Data, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089'
[ERROR] FATAL UNHANDLED EXCEPTION: System.IO.FileNotFoundException: 
Could not load file or assembly 'System.Data, Version=4.0.0.0, 
Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its 
dependencies.
File name: 'System.Data, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089'

von Peter II (Gast)


Lesenswert?

Scheinbar fehlet System.Data in der 4.0 Version. Hast du wirklich alle 
Pakete für Mono installiert?

von bass (Gast)


Lesenswert?

ebenso wie die Meldung:

Unhandled Exception:
System.IO.FileNotFoundException: Could not load file or assembly 
'MySql.Data, Version=6.8.6.0, Culture=neutral, 
PublicKeyToken=c5687fc88969c44d' or one of its dependencies.
File name: 'MySql.Data, Version=6.8.6.0, Culture=neutral, 
PublicKeyToken=c5687fc88969c44d'
[ERROR] FATAL UNHANDLED EXCEPTION: System.IO.FileNotFoundException: 
Could not load file or assembly 'MySql.Data, Version=6.8.6.0, 
Culture=neutral, PublicKeyToken=c5687fc88969c44d' or one of its 
dependencies.
File name: 'MySql.Data, Version=6.8.6.0, Culture=neutral, 
PublicKeyToken=c5687fc88969c44d'

von bass (Gast)


Lesenswert?

Ich glaube die System.Data wird jetzt gefunden
Wie kann ich denn ein Paket für mono installieren?

von bass (Gast)


Lesenswert?

was mich wunder ist wenn die Aus dem bin Ordner die Datei 
"MySql.Data.dll" kopiere auf den Mac kopiere wird daraus 
"mysql.data.dll" von da aus kopiere ich sie dann auf den Raspberry muss 
ich sie dann wieder umbenennen?

von bass (Gast)


Lesenswert?

Hat keiner eine Idee?

von Peter II (Gast)


Lesenswert?

bass schrieb:
> Hat keiner eine Idee?

teste es doch einfach. Bei Linux ist groß und Kleinschreibung wichtig.

von bass (Gast)


Lesenswert?

jetzt bekomme ich folgende Meldung wenn ich die .exe ausführe

Unhandled Exception:
System.TypeInitializationException: An exception was thrown by the type 
initializer for MySql.Data.MySqlClient.MySqlConnection ---> 
System.TypeInitializationException: An exception was thrown by the type 
initializer for System.Collections.Generic.Queue`1 ---> 
System.InvalidProgramException: Invalid IL code in 
System.Collections.Generic.Queue`1:.cctor (): method body is empty.

  --- End of inner exception stack trace ---
  at 
MySql.Data.Common.Cache`2[System.String,MySql.Data.MySqlClient.MySqlConn 
ectionStringBuilder]..ctor  (Int32 initialCapacity, Int32 capacity) 
[0x00000] in <filename unknown>:0
  at MySql.Data.MySqlClient.MySqlConnection..cctor () [0x00000] in 
<filename unknown>:0
  --- End of inner exception stack trace ---
  at MySQLReadWrite.Program.init () [0x00000] in <filename unknown>:0
  at MySQLReadWrite.Program.Main (System.String[] args) [0x00000] in 
<filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: 
An exception was thrown by the type initializer for 
MySql.Data.MySqlClient.MySqlConnection ---> 
System.TypeInitializationException: An exception was thrown by the type 
initializer for System.Collections.Generic.Queue`1 ---> 
System.InvalidProgramException: Invalid IL code in 
System.Collections.Generic.Queue`1:.cctor (): method body is empty.

  --- End of inner exception stack trace ---
  at 
MySql.Data.Common.Cache`2[System.String,MySql.Data.MySqlClient.MySqlConn 
ectionStringBuilder]..ctor  (Int32 initialCapacity, Int32 capacity) 
[0x00000] in <filename unknown>:0
  at MySql.Data.MySqlClient.MySqlConnection..cctor () [0x00000] in 
<filename unknown>:0
  --- End of inner exception stack trace ---
  at MySQLReadWrite.Program.init () [0x00000] in <filename unknown>:0
  at MySQLReadWrite.Program.Main (System.String[] args) [0x00000] in 
<filename unknown>:0

von Peter II (Gast)


Lesenswert?

bass schrieb:
> jetzt bekomme ich folgende Meldung wenn ich die .exe ausführe

das wird jetzt wohl schwerer. Das scheint mir mehr ein Problem zwischen 
Mono und deiner exe zu sein.

Da kannst du nur mal schauen, ob du die neuste Version von Mono hast.

von bass (Gast)


Lesenswert?

Hat jemand denn eine C# Anwendung mit mySql-Anbindung auf dem Raspberry 
am laufen und kann mir vielleicht sagen in welcher Reihenfolge und 
welche Versionen funktionieren?

von Peter II (Gast)


Lesenswert?

du kannst mal versuchen sie auf dem Pi zu Compilern, eventuell geht es 
ja dann. (also nur denn Quelltext übertragen)

von bass (Gast)


Lesenswert?

Mit welchem Compiler denn?

von Peter II (Gast)


Lesenswert?


von bass (Gast)


Lesenswert?

ok danke dann bekomme ich folgende Meldungen:
Program.cs(2,7): error CS0246: The type or namespace name `MySql' could 
not be found. Are you missing an assembly reference?
Program.cs(11,10): error CS0246: The type or namespace name 
`MySqlDataReader' could not be found. Are you missing an assembly 
reference?
Program.cs(12,10): error CS0246: The type or namespace name 
`MySqlConnection' could not be found. Are you missing an assembly 
reference?
Program.cs(13,10): error CS0246: The type or namespace name 
`MySqlCommand' could not be found. Are you missing an assembly 
reference?

von bass (Gast)


Lesenswert?

die dll's sind im selben Ordner

von Tschuri (Gast)


Lesenswert?

Habe mich auch ewig mit einer MySQL Verbindung bespielt.
Leider auch ohne Erfolg. Da scheint es noch ein Problem mit Mono zu 
geben :-(

von Peter II (Gast)


Lesenswert?

bass schrieb:
> ok danke dann bekomme ich folgende Meldungen:

hast du die Referenz auf die dll auch übergeben? Wie sieht dann aufruf 
genau auf.

von bass (Gast)


Lesenswert?

using System;
using MySql.Data.MySqlClient;

namespace MySQLReadWrite
{
  class Program
  {

    static MySqlDataReader Reader;
    static MySqlConnection connection = null;
    static MySqlCommand command;

    static void Main(string[] args)
    {
      init();

      int value = 0;

      //Endlosschleife
      while (true)
      {

        if (value==0)
        {
          value = 1;
        }
        else
        {
          value = 0;
        }

        writeTable_SerialInput(value);
        ReadTable_SerialOutput ();
        readSerialPort();

        System.Threading.Thread.Sleep(5000);
        Console.WriteLine(DateTime.Now.ToString());
      }
    }

    private static void init()
    {
      try
      {
        string myConnectionString = "SERVER=192.168.178.38;" +
          "PORT=3306;"+
          "DATABASE=xxx;" +
          "UID=xxx;" +
          "PASSWORD=xxx;";

        connection = new MySqlConnection(myConnectionString);
        command = connection.CreateCommand();
      }
      catch (Exception ex)
      {
        Console.WriteLine(ex.ToString());
      }
    }

    private static void ReadTable_SerialOutput()
    {
      try
      {
        command.CommandText = "SELECT * FROM Serial_input";
        connection.Open();
        Reader = command.ExecuteReader();

        while (Reader.Read())
        {
          string row = "";
          for (int i = 0; i < Reader.FieldCount; i++)
          {
            row += Reader.GetValue(i).ToString() + ", ";
            Console.WriteLine(row);
          }
        }
        connection.Close();
      }
      catch (Exception ex)
      {
        Console.WriteLine(ex.ToString());
      }
    }

    /// <summary>
    /// Schreibt die gelesenen Werte von der seriellen Schnittstelle in 
die Datenbank
    /// </summary>
    /// <returns></returns>
    private static void writeTable_SerialInput(int value)
    {
      try
      {
        string sqlFormattedDate = DateTime.Now.ToString("yyyy-MM-dd 
HH:mm:ss");
        string myInsertQuery = "INSERT INTO Serial_input (Alarm, Datum, 
Kommentar)  Values(" + value + ",'" + sqlFormattedDate + "', 'test')";
        command = new MySqlCommand(myInsertQuery);
        command.Connection = connection;
        connection.Open();
        command.ExecuteNonQuery();
        command.Connection.Close();
      }
      catch (Exception ex)
      {
        Console.WriteLine(ex.ToString());
      }
    }

    private static void readSerialPort()
    {

    }
  }
}

von bass (Gast)


Lesenswert?

Oder wie muss ich die Referenz übergeben?

von bass (Gast)


Lesenswert?

Compiler aufruf:
dmcs Program.cs -r:MySql.Data.dll -r:System.dll -r:System.Data.dll

dann kommt:

warning CS8001: SDK path could not be resolved
error CS0009: Metadata file `/home/pi/ReadSerialPort/System.Data.dll' 
does not contain valid metadata
Compilation failed: 1 error(s), 1 warnings

von Peter II (Gast)


Lesenswert?

geht bei mir unter Debian mit mono

dmcs test.cs -r:MySql.Data.dll -r:System.Data

musste nur die Zeile mit dem SerialPort auskommentieren.

habe nur die MySql.Data.dll noch mit ins verzeichniss gelegt.

von Karl (Gast)


Lesenswert?

bass schrieb:
> Ich habe die .exe und die MySql.Data.dll System.Data.dll auf den
> Raspberry kopiert.
>
> Wenn ich die exe mit #mono test.exe starte erhalte ich folgenden Fehler:

Warum arbeitest du überhaupt mit C# wenn das Zielsystem ein Linux ist? 
Mit Python würde es wahrscheinlich längst laufen.

von Peter II (Gast)


Lesenswert?

Karl schrieb:
> Warum arbeitest du überhaupt mit C# wenn das Zielsystem ein Linux ist?
> Mit Python würde es wahrscheinlich längst laufen.

es gibt halt Leute die wert auf Typsicherheit legen. Und sich nicht mit 
scripten beschäftigen wollen.

Ich kann es nachvollziehen.

von bass (Gast)


Lesenswert?

Welche Versionen hast du denn von MySql.Data.dll und System.Data???

von Peter II (Gast)


Lesenswert?

bass schrieb:
> Welche Versionen hast du denn von MySql.Data.dll und System.Data???

MySql.Data.dll aktuelle aus dem Netz
System.Data keine Ahnung, mono ist bestimmt schon 1 Jahr alt.

Hast du etwa die System.Data mit hin kopiert?

Bei mir ist es aber ein normales x68 System, kein rpi.

von bass (Gast)


Lesenswert?

auf nem x86 läuft es bei mir auch aber nicht auf dem pi...

von Peter II (Gast)


Lesenswert?

bass schrieb:
> auf nem x86 läuft es bei mir auch aber nicht auf dem pi...

auch unter mono?

von Peter II (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal meine Kompilierte exe, eventuell läuft die ja bei dir.

von bass (Gast)


Lesenswert?

Ah es läuft!!! Ich hatte immer die 4.0 Version der MySql.Data.dll habe 
auf dem Pi aber 4.5 installiert. Trotzdem Vielen Dank für die Hilfe!!!

von bass (Gast)


Lesenswert?

Aber nochmal zurück mit welcher Sprache sollte man den auf dem Pi 
programmieren ??? C,C++ Phyton was ist am gängigsten? Habe beruflich 
halt viel mit C# zu tun...

von Peter II (Gast)


Lesenswert?

bass schrieb:
> Aber nochmal zurück mit welcher Sprache sollte man den auf dem Pi
> programmieren ??? C,C++ Phyton was ist am gängigsten? Habe beruflich
> halt viel mit C# zu tun...

dann würde ich auch bei C# bleiben, üblich ist es aber nicht.

von bass (Gast)


Lesenswert?

Würde mich ja auch gern mal in C++ und Qt einarbeiten. Kann man denn mit 
C# auch grafische Oberflächen auf auf dem Pi laufen lassen?

von Peter II (Gast)


Lesenswert?

bass schrieb:
> Kann man denn mit
> C# auch grafische Oberflächen auf auf dem Pi laufen lassen?

WindowsForm sollte gehen

http://www.mono-project.com/docs/gui/winforms/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.