Skip to main content
Weil einfach - produktiver ist

Der Daten Spezialist

Konvertieren Sie die Daten mühelos zwischen verschiedenen Formaten ohne Programmierkenntnisse dank Visual Designer. Effizient und super einfach.
Flowheater Download

"System-Byte[]" statt Feldinhalt

Mehr
10 Jahre 4 Monate her #1502 von Stephan
"System-Byte[]" statt Feldinhalt wurde erstellt von Stephan
Beim Test von FlowHeater bin ich auf folgendes Problem gestossen:

Ich habe eine CRM Datenbank auf Basis My SQL 3.2. Auf den Entwickler kann ich leider nicht mehr zugreifen. Ich möchte deshalb diese Datenbank migrieren. In der Datenbank befindet sich ein Freitextfeld mit der Beschreibung von Interessensfeldern der Kunden. Beim Export dieser Daten in Excel oder Postgres wird in diesem Feld nur die Information "System.Byte[]" statt des Feldinhaltes angezeigt. Auch wenn ich das Feldformat von String auf RAW sowohl in der Quelle als auch im Ziel umstelle ändert dies nichts. Alle weiteren Daten werden problemlos ins neue Zielsystem übertragen.

Wie kann ich diese Inhalte in die neue Datenstruktur aufnehmen?

Danke und viele Grüsse

Stephan

Bitte Anmelden um der Konversation beizutreten.

Mehr
10 Jahre 4 Monate her #1503 von FlowHeater-Team
FlowHeater-Team antwortete auf "System-Byte[]" statt Feldinhalt
Hallo,
dann werden Ihre Freitext Daten nicht in einem Text Datenfeld (char, varchar, text, ...) gespeichert sondern werden Binär z.B in einem varbinary(x) Feld gespeichert, sehr ungewöhnlich.

Wenn das wirklich so ist, kommt es darauf an in welchen Zeichensatz der Text in das MySQL Feld geschrieben wird. Ich würde jetzt mal Windows ANSI bzw. UTF8 annehmen.

Versuchen Sie mal folgendes.
Ziehen Sie in die Verbindung des Feldes von der READ zur WRITE Seite einen .NET Script Heater ein. Öffnen Sie über einen Doppelklick darauf die Eigenschaften und überschreiben Sie den Beispielcode mit folgenden kleinen Script.
Code:
public object DoWork() { int count = InValues.Length; if (count != 1) throw new ArgumentException("Es wird ein Eingangsparameter erwartet!"); object o = InValues[0].GetValue(); if (o != null && o is byte[]) return Encoding.Default.GetString((byte[])o); return "keine Daten vorhanden!"; }

So werden die in dem MySQL Binary Feld gespeicherten Daten in eine Zeichenkette vom Zeichensatz Windows ANSI umgewandelt. Sollte das nicht funktionieren ersetzen Sie bitte mal die Zeile

return Encoding.Default.GetString((byte[])o);

mit

return Encoding.UTF8.GetString((byte[])o);

Hiermit wandeln Sie den Inhalt in eine UTF8 Zeichenkette um. Ich denke eines von beiden wird es sein. Wenn nicht müssten wir etwas tiefer in Ihr zugrunde liegendes MySQL Datenbankschema einsteigen.

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.

Bitte Anmelden um der Konversation beizutreten.

Mehr
10 Jahre 4 Monate her #1514 von Stephan
Stephan antwortete auf "System-Byte[]" statt Feldinhalt
Danke für das rasche Feedback, so funktioniert es.

Bitte Anmelden um der Konversation beizutreten.

Mehr
8 Jahre 6 Monate her #2468 von TVH
Ich möchte hier nochmal ansetzen.
Ich habe das Problem umgekehrt. Ich möchte den Inhalt eine Accesspalte (im Bsp: "Standard") in eine SQL-Tabelle mit "Binary"-Vorgabe importieren.
0x30 = 0
0x31 = 1
Gebe ich in der Access-Spalte "0" oder "1" ein, komme ich nicht weiter.
Gibt es eine Möglichkeit die Information nach SQL zu bekommen?







Bitte Anmelden um der Konversation beizutreten.

Mehr
8 Jahre 6 Monate her - 8 Jahre 6 Monate her #2469 von FlowHeater-Team
FlowHeater-Team antwortete auf "System-Byte[]" statt Feldinhalt
Hallo TVH

Um eine Zeichenfolge in einer SQL BINARY Spalte speichern zu können muss diese vorher in eine Byte Array konvertiert werden. Das unten stehende .NET Skript wandelt die eingehende Zeichenfolge in das benötigte Byte Array um, verwendet dazu die Windows ANSI Default Codepage (auf Ihrem System eingestellte Codepage).

Je nachdem welche Codepage Sie wirklich benötigen könnte das auch noch implementiert werden.

Hierzu muss im Skript lediglich die Zeile
return Encoding.Default.GetBytes(sIN);
ausgetauscht werden.

z.B.
Umwandeln als UTF8 Byte Array return Encoding.UTF8.GetBytes(sIN);

Umwandeln als UNICODE Byte Array return Encoding.Unicode.GetBytes(sIN);

oder aber auch als MS DOS ASCII return Encoding.ASCII.GetBytes(sIN);


Hinweis: Auf der WRITE Seite müssen Sie für das Feld den FlowHeater Datentypen RAW verwenden!

.NET C# Skript
Code:
public object DoWork() { if (InValues.Length != 1) throw new Exception(".NET Script Heater - ein Eingangsparameter erwartet!"); string sIN = (string)InValues[0].GetString(); // für Windows ANSI Codepage return Encoding.Default.GetBytes(sIN); }

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Letzte Änderung: 8 Jahre 6 Monate her von FlowHeater-Team.

Bitte Anmelden um der Konversation beizutreten.

Mehr
8 Jahre 6 Monate her #2470 von TVH
Guten Morgen Herr Stark,
vielen Dank für Ihren Service. So wie Sie es geschrieben haben, funktioniert es.
Beste Grüße TVH

Bitte Anmelden um der Konversation beizutreten.

Mehr
5 Jahre 2 Wochen her #3664 von Rainer N. aus E.
Rainer N. aus E. antwortete auf "System-Byte[]" statt Feldinhalt
Hallo Community,

ich habe ein ähnlich gelagertes Problem. Über einen SQL-Heater hole ich ein Datum aus einer MySQL-Tabelle mit folgendem Befehl:

select max(STR_TO_DATE(USER_Startzeit,'%d.%m.%Y %H:%i'))
und
select max(STR_TO_DATE(USER_Startzeit,'%d.%m.%Y %H:%i'))

Die werden über einen Appand-Heater zusammen gefügt..
Wenn ich die Daten auf der Write-Seite (MySQL) in ein Varchar Feld schreiben, kommt die besagte Fehlermeldung "System-Byte[]". Jage ich die Daten durch den NET-Heater, kommt wenigstens kein Fehler mehr und man kann Daten erkennen, allerdings sind die gesprengt. Das Ergebnis sieht so aus:
von: 1.3.2.019 bis 8.3.2.019
Richtig wäre von: 1.3.2019 bis 8.3.2019

Kann jemand helfen?

Viele Grüße.
Rainer

Bitte Anmelden um der Konversation beizutreten.

Mehr
5 Jahre 2 Wochen her #3665 von FlowHeater-Team
FlowHeater-Team antwortete auf "System-Byte[]" statt Feldinhalt
Hallo Rainer,

Hier scheint die MAX bzw. MIN Aggregatsfunktion abhängig von der MySQL Version unterschiedliche Datentypen zurückzuliefern. Versuchen Sie mal einen zusätzlichen CAST einzubauen.

z.B. select cast(max(STR_TO_DATE(USER_Startzeit,'%d.%m.%Y %H:%i')) as datetime)
 

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.

Bitte Anmelden um der Konversation beizutreten.

Ladezeit der Seite: 0.367 Sekunden

FlowHeater - Der Daten Spezialist

Effiziente Datenintegration und Transformation mit FlowHeater - Ihre Lösung für nahtlosen Datentransfer.

Rechtliches

Support & Kontakt

Kontaktinformation

Telefon:
0951 / 99339792

E-Mail:
Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.


Copyright © 2009-2024 by FlowHeater GmbH. Alle Rechte vorbehalten.