Laden von großen SQL Datenmengen



  • MSSQL, C, ODBC

    Hallo zusammen,

    ich würde ganz gerne wissen, was "Best Practice" ist um viele Daten auszulesen.
    Ich habe in meiner Clientanwendung einen entsprechenden Array mit einer definierten Struktur und einer "ungefähren" Größe(wird nachher noch genau berechnet.

    Irgendwie komme ich jetzt an der Stelle mit dem SQLFetch und dem SQLBindCol nicht weiter. Wie kann ich jetzt genau nach jedem Fetch das nächte Element im Array beschreiben lassen oder muss ich jedes mal ein memcpy in meinen entsprechenden Bereich machen und spare mir den SQLBindCol Kram?



  • Ich würde da wirklich nicht über ODBC gehen, sondern gucken, ob es keinen nativen Treiber für C/C++ gibt. ICh bin mir sicher, dass es sowas für MSSQL gibt.

    Wenn es unbedingt ODBC sein muss kannst du SQLGetData benutzen und Daten blockweise lesen, es gibt dau sogar ein Beispiel in der MSDN.

    void func()
    {
       char SQLBuffer[128];
       SQL_INTEGER BufSize = 0;
    
       vector<char> Data;
    
       // Daten in 128 Byte Blöcken lesen
       while( SQL_SUCCESS( ::SQLGetData( ..., sizeof( SQLBuffer ), &BufSize ) ) )
       {
          if( BufSize >= 0 ) Data.insert( Data.end(), SQLBuffer, SQLBuffer + BufSize );
       }
       // die Daten der aktuellen Spalte stehen jetzt in Data
    }
    

Log in to reply