FlowHeater Demo Video
 
FlowHeater - The Data Import / Export Specialist
 
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
Schauen Sie sich auch die verfügbaren Beispiele zum MySQL Adapter an evtl. kann Ihre Frage hiermit schon beantwortet werden: CSV Import , Nur neue Datensätze exportieren , Datenmigration
  • Seite:
  • 1

THEMA: "System-Byte[]" statt Feldinhalt

"System-Byte[]" statt Feldinhalt 5 Jahre 9 Monate her #1502

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 oder Registrieren um der Konversation beizutreten.

"System-Byte[]" statt Feldinhalt 5 Jahre 9 Monate her #1503

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Beiträge: 1429
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.
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 oder Registrieren um der Konversation beizutreten.

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.

"System-Byte[]" statt Feldinhalt 5 Jahre 9 Monate her #1514

Danke für das rasche Feedback, so funktioniert es.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

"System-Byte[]" statt Feldinhalt 3 Jahre 11 Monate her #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?







Bitte Anmelden oder Registrieren um der Konversation beizutreten.

"System-Byte[]" statt Feldinhalt 3 Jahre 11 Monate her #2469

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Beiträge: 1429
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
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.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

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: von FlowHeater-Team.

"System-Byte[]" statt Feldinhalt 3 Jahre 11 Monate her #2470

Guten Morgen Herr Stark,
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.

"System-Byte[]" statt Feldinhalt 5 Monate 1 Woche her #3664

  • Rainer N. aus E.
  • Rainer N. aus E.s Avatar
  • Offline
  • Beiträge: 20
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 oder Registrieren um der Konversation beizutreten.

"System-Byte[]" statt Feldinhalt 5 Monate 1 Woche her #3665

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Beiträge: 1429
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.
Folgende Benutzer bedankten sich: Rainer N. aus E.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

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.
  • Seite:
  • 1

andere Sprachen

en

FlowHeater Home

de en

Impressum/Kontakt

Datenschutz

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

Follow us on

twitter  facebook

YouTube

 de en