Announcement

Collapse
No announcement yet.

ODBC Problem bei Umstellung auf Native Client 10 (SQL-Server 2008)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ODBC Problem bei Umstellung auf Native Client 10 (SQL-Server 2008)

    Hallo zusammen,
    wir haben hier eine alte Legacy-Anwendung, sie seit Jahrzehnten den
    Datenzugriff über ODBC abwickelt. Jetzt wollen wir auf SQL Server
    umstellen, und ich habe hier die 2008 er Express Version installiert, nebst
    Native Client 10 - eine Standardkonfiguration, ganz normal.

    Allerdings laufen unsere ODBC-Anweisungen nicht mehr, und zwar speziell die
    INSERTs mit Parametern - also sowas wie

    INSERT INTO Table1 ( A, B ) values ( 100 , ? )

    Ein probehalber direkt ausgeführtes insert, etwa wie

    INSERT INTO Table1 ( A, B ) values ( 100 , 200 )

    geht dagegen einwandfrei.
    Als erstes natürlich Google durchgesehen, und eine Reihe von Beispielapps
    angesehen - beispielsweise diese hier:

    http://support.microsoft.com/kb/135715/en-us

    Da gehts zwar um was anderes, aber der ODBC-Code sollte doch funktionieren,
    schließlich ist er direkt von Microsoft, wenn auch schon etwas älter.
    Zusammengestrichen aufs Wesentliche (ohne Fehlerbehandlung, Logging etc)
    sieht es bei mir nun so aus:

    SQLAllocEnv(&henv);
    SQLAllocConnect( henv, &hdbc );
    SQLConnect( hdbc, (uchar*)"Der-ODBC-Treiber", SQL_NTS, (uchar*)"Der-Name",
    SQL_NTS, (uchar*)"Das-Passwort", SQL_NTS );

    SQLAllocStmt( hdbc, &hstmt )
    SQLPrepare( hstmt, (uchar*)"INSERT INTO Table1 ( A, B ) values ( 100 , ?
    )", SQL_NTS );


    SQLBindParameter( hstmt, 1, SQL_PARAM_INPUT, SQL_C_SHORT, SQL_SMALLINT,
    0, 0, (SQLPOINTER)1, 0, &length );

    length = SQL_LEN_DATA_AT_EXEC(0); // hier überflüssig ??

    retcode = SQLExecute( hstmt );

    while (retcode == SQL_NEED_DATA)
    {

    retcode = SQLParamData( hstmt, &ret_id );
    if ( retcode == SQL_NEED_DATA )
    {
    int i = 3;
    SQLPutData( hstmt, (SQLPOINTER)&i, 0 );
    }

    }


    SQLFreeStmt( hstmt, SQL_CLOSE );
    SQLDisconnect( hdbc );
    SQLFreeConnect( hdbc );
    SQLFreeEnv( henv );


    ich denke mal, hier müsste alles richtig sein - mir fällt nichts ein, was
    man ändern könnte, höchstens vielleicht die Konstanten bei
    SQLBindParameter. Da habe ich aber ich mir verschiedenen Kombinationen
    experimentiert, leider ohne Erfolg.

    Wieseo also geht das nicht mit Native Client 10, während dieser Code früher
    einwandfrei ging?

    Und warum liegt das an dem variablen Parameter? Der daraus folgende
    Verdächtige wäre SQLBindParameter, aber ich habe keine Ahnung, was das sein
    könnte.

    Hat jemand ODBC "am Laufen" mit Native Client 10?
Working...
X