[gelöst] ODBC und unsigned Datentypen



  • Hallo zusammen,

    ich habe ein Problem beim Schreiben von unsigned Datentypen per ODBC, genauer beim Binden von Parametern an einen Platzhalter in einem Prepared Statement. Die ODBC API sieht offenbar nur signed Datentypen vor (SQL_SMALLINT für short, SQL_INTEGER für int und SQL_BIGINT für int64_t). Da es offenbar keine unsigned Datentypen gibt habe ich versucht, einen ushort an einen SQL_SMALLINT zu binden, das geht aber in die Hose, wenn der ushort > 32767 ist. Der ODBC Treiber meldet im Fall von 35000 die Fehlermeldung "35000 is out of range for type smallint". Meine "Lösung" ist im Moment, dass ich für unsigned Datentypen den nächstgrößeren signed Datentypen benutze, da der unsigned Wert in den nächstgrößeren signed Datentypen passt.
    Das funktioniert für uint64_t nicht mehr, da es keinen int128_t gibt, an den ich binden könnte.
    Wie löst man das jetzt? Den Parameter als Text binden? Ich finde weder im Netz noch in der ODBC API Hilfe irgendwas dazu.



  • Nachtrag:
    uint64_t Werte größer als 9.223.372.036.854.775.807 lassen sich als Text an den Parameter binden, dazu formatiere ich ihn per sprintf( buffer, "%llu" );. Alles, was in einen int64_t passt schreibe ich direkt, größere Werte werden als Text formatiert und als Text geschrieben.


Log in to reply