Laden...

Auslesen von Text-Feldern (nicht Varchar!) aus MySQL Datenbank

Erstellt von CoderboyPB vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.036 Views
C
CoderboyPB Themenstarter:in
327 Beiträge seit 2008
vor 13 Jahren
Auslesen von Text-Feldern (nicht Varchar!) aus MySQL Datenbank

verwendetes Datenbanksystem: MySQL client version: 5.1.41

Hallo 😃
Ich brauche mal wieder eure erfahrene Hilfe:

Ich lese mittels der MySQLDriverCS Libaray eine Tabelle aus:


MySQLConnection conn = new MySQLConnection(new MySQLConnectionString("localhost", "egroupware", "root", "").AsString);
conn.Open();
MySQLDataAdapter myDataAdapter = new MySQLDataAdapter("SELECT news_date, news_headline, news_content, news_teaser FROM egw_news", conn);
DataSet myDataSet = new DataSet();
myDataAdapter.Fill(myDataSet, "News_egroupware");
DataTable myDataTable = myDataSet.Tables["News_egroupware"];

foreach (DataRow row in myDataTable.Rows)
{
      Console.WriteLine(row["news_teaser"].ToString()); // --> System.Byte[];           
}

Das klappt auch soweit.

Problem nur: Während sich news_date (bigint) und news_header (varchar) ohne Probleme auslesen lassen, bekomme ich als Ausgabe für news_teaser und news_content : System.Byte[]

Was muss ich anders machen, um auch an diesen Text zu kommen?

2.223 Beiträge seit 2005
vor 13 Jahren

Hallo CoderboyPB,

dieses byte Array kannst du mittels dem BinaryFormatter wieder in sein ursprünglichen Inhalt umwandeln

ungefähr so müsste das funktionieren


public string ConvertFromByteArray(byte[] data)
{
  BinaryFormatter bf = new BinaryFormatter(); 
  MemoryStream msb = new MemoryStream(data);
  return bf.Deserialize(msb).ToString();
}

Viele Grüße
Lars

C
CoderboyPB Themenstarter:in
327 Beiträge seit 2008
vor 13 Jahren

Hi Lars 😃

Habe das gerade mal ausprobiert, aber leider bekomme ich nur einen leeren String zurück 😦
Hast du irgendeine Idee, woran das liegen könnte?

Aber trotzdem Danke für deine Antwort 😃

LG Mirco

2.223 Beiträge seit 2005
vor 13 Jahren

ein leerer String ist sehr unwahrscheinlich, biste die einzelnen Schritte mal im Debugger angeschaut ?

ist in data wirklich etwas drin?

Viele Grüße
Lars

3.825 Beiträge seit 2006
vor 13 Jahren

Meine Version ist simpler und langsamer :

if (dr[0].GetType() == typeof(System.String)) result = (string)dr[0];
else foreach (byte bt in (byte[])dr[0]) if (bt == 10) result += "\r\n"; else result += (char)bt;

Ich benutze das für Fälle in denen die Spalte manchmal string und manchmal byte[], je nach Versionsnummer des MySql Net-Connectors.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

C
CoderboyPB Themenstarter:in
327 Beiträge seit 2008
vor 13 Jahren

So, habe deinen Funktion noch mal eingebaut, da erhalte ich folgende Execption:

Der Eingabestream hat kein gültiges binäres Format. Die Startinhalte (in Bytes) sind: 44-69-65-20-52-61-79-6E-65-74-20-47-6D-62-48-20-62 ...

Habe es jetzt mit dieser Funktion gemacht, was jetzt auch funktioniert:


 public static string ConvertFromByteArray(byte[] data)
        {
            StringBuilder sbOut = new StringBuilder();

            foreach (char b in data)
            {
                sbOut.Append(b);
            }

            return sbOut.ToString();
        }

309 Beiträge seit 2008
vor 13 Jahren

Die Funktion gibt es schon fertig im Framework:

string s = Encoding.ASCII.GetString(data);

Was du da hast ist ein "C-Style" String (ASCII char-Array).

using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}