Dynamischer Daten Import / Export

datenbank

weil Einfach - produktiver ist
Mit der Freeware Version können bis zu 10.000 Datensätze verarbeitet werden!
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
Willkommen im FlowHeater Support Forum!

Hier werden Fragen zum Umgang mit dem FlowHeater beantwortet.

THEMA: "System-Byte[]" statt Feldinhalt

"System-Byte[]" statt Feldinhalt 3 Jahre 3 Wochen her #1502

  • Stephan
  • Stephans Avatar
  • Offline
  • New Member
  • Beiträge: 11
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
Der Administrator hat öffentliche Schreibrechte deaktiviert.

"System-Byte[]" statt Feldinhalt 3 Jahre 3 Wochen her #1503

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1101
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.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

"System-Byte[]" statt Feldinhalt 3 Jahre 3 Wochen her #1514

  • Stephan
  • Stephans Avatar
  • Offline
  • New Member
  • Beiträge: 11
Danke für das rasche Feedback, so funktioniert es.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

"System-Byte[]" statt Feldinhalt 1 Jahr 2 Monate her #2468

  • TVH
  • TVHs Avatar
  • Offline
  • Junior Member
  • Beiträge: 27
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?







Der Administrator hat öffentliche Schreibrechte deaktiviert.

"System-Byte[]" statt Feldinhalt 1 Jahr 2 Monate her #2469

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Beiträge: 1101
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.
Letzte Änderung: 1 Jahr 2 Monate her von FlowHeater-Team.
Der Administrator hat öffentliche Schreibrechte deaktiviert.

"System-Byte[]" statt Feldinhalt 1 Jahr 2 Monate her #2470

  • TVH
  • TVHs Avatar
  • Offline
  • Junior Member
  • Beiträge: 27
Guten Morgen Herr Stark,
vielen Dank für Ihren Service. So wie Sie es geschrieben haben, funktioniert es.
Beste Grüße TVH
Der Administrator hat öffentliche Schreibrechte deaktiviert.
Moderatoren: FlowHeater-Team
Ladezeit der Seite: 0.087 Sekunden