DatagridView und Blob in MySql Datenbank



  • Hallo,
    ich lade eine Tabelle aus einer MySql Datenbank über einen DataAdapter und eine BindingSource in eine DataGridView.

    Hier schonmal der Code:

    String^ constring=L"datasource=137.226.10.73;port=3306;username=userbestand;password=best709and";
    			MySqlConnection^ conDataBase=gcnew MySqlConnection(constring);
    			MySqlCommand^ cmdDataBase=gcnew MySqlCommand("SELECT `ringe`.`Id`,`ringe`.`Nummer`,`ringe`.`Aussendurchmesser`,`ringe`.`Dicke`,`ringe`.`Hoehe`,`ringe`.`Anzahl`,`ringe`.`Masse`,`ringe`.`Profil`,`ringe`.`Werkstoff`,`ringe`.`Kommentar`,`ringe`.`Bild` FROM `db_bestand`.`ringe`;;",conDataBase);
    			MySqlDataReader^ myReader;
    			//Hier beginnt das Event Handling
    			try{
    
    				MySqlDataAdapter ^sda = gcnew MySqlDataAdapter();
    				sda->SelectCommand = cmdDataBase;
    				DataTable^ dbdataset = gcnew DataTable();
    				sda->Fill(dbdataset);
    				BindingSource^ bSource = gcnew BindingSource();
    
    				bSource->DataSource= dbdataset;
    				dgvRinge->DataSource = bSource;
    				sda->Update(dbdataset);
    
    			}catch(Exception^ ex){
    
    				MessageBox::Show(ex->Message);
    			}
    

    Beim Kompilieren kommt keine Fehlermeldung.
    Beim Laden der Daten aber dann folgender Fehler:

    Bild

    Vorne Weg: Ich bin auch einer der Quereinsteiger, denen die Hände gebunden sind. Im Rahmen meiner Projektarbeit hab ich WindowsForms und Cli zu benutzen.

    Danke schonmal für Denkanstöße. Achja, lade ich das Bild nicht mit im MySql-Command, dann funktioniert alles einwandfrei.

    Beste Grüße
    Jay



  • Jayhead86 schrieb:

    Im Rahmen meiner Projektarbeit hab ich WindowsForms und Cli zu benutzen.

    Also ADO.net Datenbankabfragen sind schon was, was man auch in C++/CLI machen kann. In C# würde das auch nicht viel anders aussehen, solange kein LINQ ins Spiel kommt.
    Die berechtigte Kritik hier im Forum bezieht sich auf die Verwendung von Windows Forms.

    Jayhead86 schrieb:

    denen die Hände gebunden sind

    Was aber nicht als Entschuldigung für alles gelten kann.
    Ich bin nicht der ADO.net Experte, aber da es dort die wichtigen Klassen DataTable und DataSet gibt, käme ich z.B. nicht auf die Idee eine Variable vom Typ DataTable ausgerechnet "dbdataset" zu nennen ...

    Jayhead86 schrieb:

    Achja, lade ich das Bild nicht mit im MySql-Command, dann funktioniert alles einwandfrei.

    Es wird ja aus der Fehlermeldung offensichtlich, dass aus dem, was da aus MySQL kommt, kein Bild erzeugt werden kann. Wenn dir nicht die Hände gebunden wären, könnte man mal mit dem Debugger nachschauen, wo genau die Exception kommt und ob da weitere Infos zu dem falschen Parameter stehen.

    Auch müsste man das Schreiben und Lesen aus der Datenbank mal anschauen, eventuell werden die Bytes des Blobs da in irgendeinem Encoding gespeichert, so dass das Bild dann beim Zuweisen an das DataGridView nicht mehr das originale Format hat.

    Das ist aber auch ein Problem dieser Klicki-Klicki-Programmierung, wo man einfach Komponenten aufs Formular zieht und dann alles automatisch gehen soll.
    Schon dass da alle Bilder aus der Datenbanktabelle auf einmal in den Arbeitsspeicher geladen werden, statt nur die die gerade sichtbar sind ...
    (Stichwort: Paging)

    In der MySQL Doku sieht man eher Beispiele, wo das zu Fuss gemacht wird
    http://dev.mysql.com/doc/refman/5.5/en/connector-net-programming-blob.html
    Auffällig ist auch, dass da eine Dateigröße in einer weiteren DB-Spalte verwendet wird. Möglicherweise geht das, was du da machst nicht vollautomatisch, sondern muss entsprechend ausprogrammiert werden.

    Also erstmal testen, wie in der Doku mit einem Command, Byte-Array usw., ob da ein korrektes Bild zurückkommt.
    Wenn das funktioniert, erstmal auf den DataAdapter und das Fill verzichten und die DataTable in einer Schleife manuell über den DataReader befüllen.


Log in to reply