- Beiträge: 11
"System-Byte[]" statt Feldinhalt
- Stephan
- Autor
- Offline
- Benutzer
Weniger
Mehr
11 Jahre 1 Monat her #1502
von Stephan
"System-Byte[]" statt Feldinhalt - Beitrag(1502) 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
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 oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
11 Jahre 1 Monat her #1503
von FlowHeater-Team
gruß
Robert Stark
FlowHeater-Team antwortete auf "System-Byte[]" statt Feldinhalt - Beitrag(1503)
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.
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.
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
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Stephan
- Autor
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 11
11 Jahre 1 Monat her #1514
von Stephan
Stephan antwortete auf "System-Byte[]" statt Feldinhalt - Beitrag(1514)
Danke für das rasche Feedback, so funktioniert es.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- TVH
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 32
9 Jahre 3 Monate her #2468
von TVH
TVH antwortete auf "System-Byte[]" statt Feldinhalt - Beitrag(2468)
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?
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?
Anhänge:
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
9 Jahre 2 Monate her - 9 Jahre 2 Monate her #2469
von FlowHeater-Team
gruß
Robert Stark
FlowHeater-Team antwortete auf "System-Byte[]" statt Feldinhalt - Beitrag(2469)
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
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
Letzte Änderung: 9 Jahre 2 Monate her von FlowHeater-Team.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- TVH
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 32
9 Jahre 2 Monate her #2470
von TVH
TVH antwortete auf "System-Byte[]" statt Feldinhalt - Beitrag(2470)
Guten Morgen Herr Stark,
vielen Dank für Ihren Service. So wie Sie es geschrieben haben, funktioniert es.
Beste Grüße TVH
vielen Dank für Ihren Service. So wie Sie es geschrieben haben, funktioniert es.
Beste Grüße TVH
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Rainer N. aus E.
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 33
5 Jahre 9 Monate her #3664
von Rainer N. aus E.
Rainer N. aus E. antwortete auf "System-Byte[]" statt Feldinhalt - Beitrag(3664)
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:
Richtig wäre von: 1.3.2019 bis 8.3.2019
Kann jemand helfen?
Viele Grüße.
Rainer
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..
von: 1.3.2.019 bis 8.3.2.019 |
Kann jemand helfen?
Viele Grüße.
Rainer
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
5 Jahre 9 Monate her #3665
von FlowHeater-Team
gruß
Robert Stark
FlowHeater-Team antwortete auf "System-Byte[]" statt Feldinhalt - Beitrag(3665)
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)
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
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Ladezeit der Seite: 0.322 Sekunden