Re: SQLBulkOperations - Mailing list pgsql-odbc
From | John C. Frickson |
---|---|
Subject | Re: SQLBulkOperations |
Date | |
Msg-id | 1402122254.8234.45.camel@server.frickson.pvt Whole thread Raw |
In response to | Re: SQLBulkOperations (Hiroshi Inoue <inoue@tpf.co.jp>) |
List | pgsql-odbc |
On Sat, 2014-06-07 at 14:59 +0900, Hiroshi Inoue wrote: > (2014/06/07 1:14), John C. Frickson wrote: > > Ok, I boiled my code down to the following sample. The comments show > > the errors that get printed. > > > > ----------8<----------8<----------8<----------8<----------8<----------8<---------- > > #include <stdio.h> > > #include <string.h> > > #include <sql.h> > > #include <sqlext.h> > > > > void printerr(int); > > > > SQLHANDLE henv, hdbc, hstmt; > > > > int main() > > { > > SQLLEN length_or_ind[3]; > > char connOut[2048], colVal[3][32]; > > const char *query = "SELECT * FROM pvsystem.loginfails WHERE userid='foo'"; > > const char *cstr = "DRIVER={PSQL};SERVER=server.frickson.pvt;UID=pvwebuser;" > > "PWD=Zjgg2WuNwO52XGVT;UseServerSidePrepare=1;DATABASE=PortVantage;"; > > int i, rc; > > > > colVal[0][0] = colVal[1][0] = colVal[2][0] = 0; > > > > rc = SQLSetEnvAttr(NULL, SQL_ATTR_CONNECTION_POOLING, (SQLPOINTER)SQL_CP_ONE_PER_HENV, 0); > > if (rc) printerr(rc); > > rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); > > if (rc) printerr(rc); > > rc = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0); > > if (rc) printerr(rc); > > rc = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); > > > rc = SQLSetConnectAttr(hdbc, SQL_ATTR_ODBC_CURSORS, (SQLPOINTER)SQL_CUR_USE_ODBC, 0); > > if (rc) printerr(rc); > > Please try to skip the above SQLSetConnectAttr operation. > > > rc = SQLDriverConnect(hdbc, NULL, (SQLCHAR*)cstr, strlen(cstr), > > (SQLCHAR*)connOut, 2048, NULL, SQL_DRIVER_NOPROMPT); > > if (rc) printerr(rc); > > rc = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); > > if (rc) printerr(rc); > > rc = SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)1, SQL_IS_INTEGER); > > if (rc) printerr(rc); > > rc = SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_KEYSET_DRIVEN, 0); > > // rc=1 State=01S02 Native=0 Message=[unixODBC][Driver Manager]Option value changed > > if (rc) printerr(rc); > > rc = SQLSetStmtAttr(hstmt, SQL_ATTR_MAX_ROWS, 0, SQL_IS_INTEGER); > > if (rc) printerr(rc); > > rc = SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, (SQLPOINTER)SQL_CONCUR_ROWVER, 0); > > // rc=1 State=01S02 Native=0 Message=[unixODBC][Driver Manager]Option value changed > > if (rc) printerr(rc); > > rc = SQLPrepare(hstmt, (UCHAR*)query, strlen(query)); > > if (rc) printerr(rc); > > rc = SQLExecute(hstmt); > > if (rc) printerr(rc); > > for (i = 0; i < 3; ++i) { > > length_or_ind[i] = SQL_NTS; > > rc = SQLBindCol(hstmt, (SQLUSMALLINT)i+1, SQL_C_CHAR, colVal[i], 32, &length_or_ind[i]); > > if (rc) printerr(rc); > > } > > rc = SQLFetchScroll(hstmt, SQL_FETCH_NEXT, 0); > > // rc=100 - Record Not Found > > if (rc) printerr(rc); > > strcpy(colVal[0], "foo"); > > length_or_ind[0] = 3; > > strcpy(colVal[1], "1"); > > length_or_ind[1] = 1; > > strcpy(colVal[2], "2014-06-06 10:15:00"); > > length_or_ind[2] = 19; > > rc = SQLBulkOperations(hstmt, SQL_ADD); > > // rc=-1 State=IM001 Native=0 Message=[unixODBC][Driver Manager]Driver does not support this function > > if (rc) printerr(rc); > > rc = 0; > > } > It looks like that's going to work. I'll do some testing and let you know if I run into any problems. Thanks, Hiroshi!
pgsql-odbc by date: