-
Sonderzeichenproblem beim Schreiben in i5-Tabelle (z.B. €)
Hallo Forum,
ich habe eine DotNet-Anwendung. Diese erhält Daten aus unterschiedlichen Quellen und soll diese in eine oder mehrere i5-Tabellen schreiben.
Eines der Sonderzeichen ist zum Beispiel das Euro-Symbol (€).
Die CCSID der Zieltabellen ist jeweils 273.
Zum Speichern verwende ich die Update-Methode eines DBDataAdapter-Objektes. Dieses Verfahren funktioniert generell außer bei bestimmten Sonderzeichen.
Versuche ich, einen Datensatz zu speichern, der dieses Zeichen enthält, erhalte ich die Fehlermeldung:
Der Datenwert des Befehlsparameters [4] '' konnte aus anderen Gründen als einem Signaturübereinstimmungsfehler oder Datenüberlauf nicht konvertiert werden.
InnerException:
CWBZZ5014 Der Wert des Parameters "00005" konnte nicht in den Hostdatentyp umgesetzt werden.
CWBNL0107 - 4 Byte umgesetzt, 1 Fehler beim Beginn an Position 0 (scp=13488 tcp=273 siso=1 pad=0 sl=4 tl=20) gefunden
CWBNL0107 - 2 Byte umgesetzt, 1 Fehler beim Beginn an Position 0 (scp=1202 tcp=273 siso=1 pad=0 sl=2 tl=20) gefunden
Verwendet wird IBMDA400-provider
Sowohl
ForceTranslation=0
als auch
ForceTranslation=65535 (=Default)
brachten irgendwelche Änderungen.
Da ich die CCSID der Zieltabellen nicht ändern kann, wäre es mein Ziel, alle nicht umsetzbaren Zeichen als '?' darzustellen.
(Ein ähnliches Problem in diesem Forum hat:
Sonderzeichen können im SSIS-Paket auf SQL2008 nicht zur AS400 übertragen werden )
Ich habe jetzt den ganzen Tag recherchiert und experimentiert und bin für jede Hilfe dankbar.
-
Wie der Fehler schon beschreibt, die scp (SourceCodePage) wird hier als 13488, also UCS2/Unicode ausgewiesen. Da sind halt nicht alle Zeichen konvertierbar.
Nun werden Zeichenfelder immer als String und somit als UCS2 in .NET (ebenso auch in Java u.v.a.) gespeichert.
Du musst also nun (leider) eine Konvertierungsroutine schreiben, die aus einem String alle ungültigen Zeichen extrahiert bevor du die Update-Methode anwenden kannst.
Aber eigentlich ist es nicht ganz so schlimm, wenn du nur westeuropäische Zeichen erlaubst. Dann ist nur das €-Zeichen ungültig.
-
Vielen Dank für die Antwort.
Die Konvertierung kann DotNet übernehmen (muss auch allgemeiner gefasst sein, da ich nicht weiß, welche Zeichen auf mich zukommen).
Beste Ergebnisse erziele ich mit diesem Code:
Encoding enc = Encoding.GetEncoding("IBM273", newEncoderReplacementFallback("?"), newDecoderReplacementFallback("?"));
String strOut = enc.GetString(enc2.GetBytes("ABcabc12â^°²³{}~µ€@"));
//liefert: ABcabc12â^°²³{}~µ?@
(Da wo jetzt das "Kreuzchen im Kästchen" steht, sind zwei eckige Klammern im Original)
-
Korrektur:
String strOut = enc.GetString(enc.GetBytes("ABcabc12â^°²³{}~µ€@"));
-
Ich wusste gar nicht, dass .NET auch EBCDIC kann.
Liefert der Encoder da nicht dann EBCDIC, das du wieder in ANSI zurückwandeln musst?
Aber dass lässt sich ja regeln.
Similar Threads
-
By PFR in forum NEWSboard Programmierung
Antworten: 15
Letzter Beitrag: 05-01-16, 15:42
-
By loeweadolf in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 20-01-14, 12:40
-
By Sigma in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 23-04-03, 13:48
-
By JonnyRico in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 02-04-03, 15:52
-
By Michael@Paff.de in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 28-04-02, 08:42
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks