none
CRecordset::GetValue() mit langem (nvarchar(MAX)) text immer leer (MFC) RRS feed

  • 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?

    Donnerstag, 5. November 2015 15:26

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 :) 

    Freitag, 6. November 2015 16:50

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ß,
    Dimitar


    Bitte 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.

    Freitag, 6. November 2015 14:41
    Administrator
  • 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 :) 

    Freitag, 6. November 2015 16:50