Benutzer mit den meisten Antworten
CRecordset::GetValue() mit langem (nvarchar(MAX)) text immer leer (MFC)

Frage
-
Hi Leute,
ich hab ungefähr folgende Konstruktion:
SQL Server 2014 Seite:
Tabelle mit Spalte TEXT vom Typ nvarchar(MAX)
Code:
CDBVariant var;
CODBCFieldInfo odbcInfo;
this->GetFieldInfo(i, odbcInfo); this->GetFieldValue(i, var);
GetFieldValue beinhaltet in diesem Fall IMMER zwei leere Strings (CStringA und CStringW).
Datentyp:
SQL_WCHAR (-8)
Innerhalb "GetFieldValue" (Aus CRecordset) landen wir in
GetLongCharDataAndCleanup(...)
Nun sieht es so aus, dass wir in GetLong...(...) zwar alle Stringtypen behandeln aber ausschließlich SQL_WCHAR nicht. SQL_WLONGVARCHAR, SQL_LONGVARCHAR und SQL_VARCHAR werden behandelt. SQL_WCHAR nicht. (Ein Eingangsguard schließt diesen Typen explizit aus)
natürlich kann ich nun meinen Feldtyp SQL-Serverseitig auf "varchar(MAX)" drehen, aber ich hätte erwartet, dass es auch eine Behandlung von nvarchar() gibt. Übersehe ich irgendwas/mache etwas grundsätzlich falsch/nutze die falschen Methoden oder ist das als Fehler zu werten?
Antworten
-
Er bestätigt zumindest, dass ich nicht doof bin und der Fehler eher im Framwork liegt. Wobei anzumerken ist, dass sich auch varchar(MAX) nicht als SQL_LONGVARCHAR identifiziert sondern als SQL_VARCHAR - welcher aber vom Guard in GetValue() erfasst wird.
Damit file ich's als Bug. Danke :)
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 27. November 2015 08:41
Alle Antworten
-
Hallo Klischeepunk,
Sieh Dir den Lösungsansatz aus diesem Thread an:
CRecordset::GetFieldValue and nvarchar(MAX)Hoffentlich wird er auch in Deinem Fall hilfreich sein.
Gruß,
DimitarBitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Er bestätigt zumindest, dass ich nicht doof bin und der Fehler eher im Framwork liegt. Wobei anzumerken ist, dass sich auch varchar(MAX) nicht als SQL_LONGVARCHAR identifiziert sondern als SQL_VARCHAR - welcher aber vom Guard in GetValue() erfasst wird.
Damit file ich's als Bug. Danke :)
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 27. November 2015 08:41