odbc vierfache länge bei nvarchar

07/01/2010 - 17:07 von Christian Stüben | Report spam
Hallo allerseits,
ein kleines Problem mit ODBC-Zugriff auf eine Filemaker-Datenbank.

Ich greife per ODBC und dem Filemaker-eigenen Sequelink 5.5 ODBC-Treiber auf
eine Filemaker Datenbank zu.
Textfelder unter Filemaker haben keine Maximallànge, sondern können beliebig
lang werden. Parameter also wie bei...

ins1Internebemerkung.Parameters.Add("@bemerkung",
System.Data.Odbc.OdbcType.NVarChar, 3999);

Funktioniert soweit ganz gut, mir ist aber folgendes aufgefallen...
1) der NVarChar-Parameter muß 4-fach lànger als die tatsàchliche Lànge der
Texte bemessen werden. Bei obigem Beispiel kann ich also maximal 999 Zeichen
übergeben.
2) Versuche ich mehr als 999 Zeichen / Parameterbemessung mehr als 3999
Zeichen zu übergeben, kommt eine Exception mit der Message, daß oops wie war
es noch genau, "lange Felder" nicht unterstützt werden.

Ich weiß jetzt nicht, wo soll ich anfangen zu suchen. Ist das ein bekanntes
Verhalten der Komponenten unter dem Namensraum System.Data.Odbc, oder ein
generelles ODBC-Problem? Habe ich noch irgendwo einen Denkfehler? Oder ist
der Filemaker / Sequelink ODBC-Treiber einfach nur Mist?

Danke für jeden Hinweis.
mfg Chris
 

Lesen sie die antworten

#1 Elmar Boye
09/01/2010 - 18:32 | Warnen spam
Hallo Christian,

"Christian Stüben" schrieb ...
ein kleines Problem mit ODBC-Zugriff auf eine Filemaker-Datenbank.

Ich greife per ODBC und dem Filemaker-eigenen Sequelink 5.5 ODBC-Treiber auf eine Filemaker Datenbank zu.
Textfelder unter Filemaker haben keine Maximallànge, sondern können beliebig lang werden. Parameter also wie bei...

ins1Internebemerkung.Parameters.Add("@bemerkung", System.Data.Odbc.OdbcType.NVarChar, 3999);

Funktioniert soweit ganz gut, mir ist aber folgendes aufgefallen...
1) der NVarChar-Parameter muß 4-fach lànger als die tatsàchliche Lànge der Texte bemessen werden. Bei obigem Beispiel kann ich
also maximal 999 Zeichen übergeben.



Reine Vermutung: Da wird zweimal übersetzt. Laut
http://filemaker.custhelp.com/cgi-b...;p_created80732717&p_sid=Y8A6ZzRj&p_accessibility=0&p_redirect=&p_lva=&p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9NCw0JnBfcHJvZHM9ICZwX2NhdHM9JnBfcHY9JnBfY3Y9JnBfcHNfYW5zX3VwZGF0ZWQ9JnBfcGFnZT0xJnBfc2VhcmNoX3RleHQ9b2RiYyB1bmljb2Rl&p_li=&p_topview=1

wird dort Unicode _nicht_ unterstützt (Stand 6.11.2009).

Guckt man in
http://www.filemaker.com/downloads/...ide_en.pdf
so findet sich auf Seite 27:
<Zitat>
The ODBC and JDBC client drivers support the Unicode API.
However, if you're creating a custom application that uses the client drivers,
use ASCII for field names, table names, and filenames
(in case a non-Unicode query tool or application is used).
Note To insert and retrieve Unicode data, use SQL_C_WCHAR
(the SQL_C_BINARY data type is not supported).
</Zitat>

das war nur was ich in kürze gefunden habe.

Verzichte mal probehalber auf eine Parameterangabe und lasse den
Treiber den Typ selbst ermitteln, z. B. via AddWithValue()

Ich weiß jetzt nicht, wo soll ich anfangen zu suchen. Ist das ein bekanntes Verhalten der Komponenten unter dem Namensraum
System.Data.Odbc,



Der OdbcClient reicht nur an den jeweiligen ODBC Treiber weiter.
In 99,X % der Fàlle ist das Problem deswegen dort zu suchen.

Und das die DataDirect Treiber Bibliothek Unicode unterstützt reicht
alleine nicht, es muß auch beim implementierenden spezifischen Treiber ankommen.

Gruß Elmar

Ähnliche fragen