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?
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
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
ein leerer String ist sehr unwahrscheinlich, biste die einzelnen Schritte mal im Debugger angeschaut ?
ist in data wirklich etwas drin?
Viele Grüße
Lars
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
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();
}
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));}}