Re: ODBC - Bulk insert using column binding
- From: hajaansh@xxxxxxxxxxxxxx
- Date: 21 Feb 2006 06:41:53 -0800
Well i have got a half working version. It does do a bulk add, but only
the first row twice. Can anyone see where I went wrong?
SQLUINTEGER OrderIDArray[3], NumRowsFetched;
SQLCHAR SalesPersonArray[3][11],
StatusArray[3][7];
SQLINTEGER OrderIDIndArray[3],
SalesPersonLenOrIndArray[3],
StatusLenOrIndArray[3];
SQLUSMALLINT RowStatusArray[3], i;
SQLHSTMT hstmt;
int loop;
HDBC hdbc = (HDBC) __externalAddressVal(__INST(parentHandle));
SQLRETURN sr;
sr = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
if(sr != SQL_SUCCESS && sr != SQL_SUCCESS_WITH_INFO)
printf( "Error in allocating statement in
OnViewBulkinsert");
SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_BIND_TYPE, SQL_BIND_BY_COLUMN, 0);
SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (void *)2, 0);
SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_STATUS_PTR, RowStatusArray, 0);
SQLSetStmtAttr(hstmt, SQL_ATTR_ROWS_FETCHED_PTR, &NumRowsFetched, 0);
// Set the cursor type.
sr = SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, (void*)
SQL_CURSOR_DYNAMIC, SQL_IS_UINTEGER);
// Lock out other users.
sr = SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY,
(void*) SQL_CONCUR_LOCK, SQL_IS_UINTEGER);
if(sr != SQL_SUCCESS && sr != SQL_SUCCESS_WITH_INFO)
printf( "Error in setting locking in
OnViewBulkinsert");
// Bind arrays to the OrderID, SalesPerson, and Status columns.
SQLBindCol(hstmt, 1, SQL_C_ULONG, OrderIDArray, 0, OrderIDIndArray);
SQLBindCol(hstmt, 2, SQL_C_CHAR, SalesPersonArray,
sizeof(SalesPersonArray[0]),
SalesPersonLenOrIndArray);
SQLBindCol(hstmt, 3, SQL_C_CHAR, StatusArray, sizeof(StatusArray[0]),
StatusLenOrIndArray);
// Execute a statement to retrieve rows from the Orders table.
SQLExecDirect(hstmt, "SELECT OrderID, SalesPerson, Status FROM Orders",
SQL_NTS);
OrderIDArray[0] = 1;
OrderIDArray[1] = 2;
OrderIDIndArray[0] = 0;
OrderIDIndArray[1] = 0;
strcpy(SalesPersonArray[0], "Jackson");
strcpy(SalesPersonArray[1], "Clinton");
SalesPersonLenOrIndArray[0]= 7;
SalesPersonLenOrIndArray[1]= 7;
strcpy(StatusArray[0], "a");
strcpy(StatusArray[1], "b");
StatusLenOrIndArray[0] = 1;
StatusLenOrIndArray[1] = 1;
printf("Do bulk operation");
sr = SQLBulkOperations(hstmt, SQL_ADD);
if(sr != SQL_SUCCESS && sr != SQL_SUCCESS_WITH_INFO)
printf( "Error in bulk insert");
// Close the cursor.
SQLCloseCursor(hstmt);
.
- Follow-Ups:
- Re: ODBC - Bulk insert using column binding
- From: hajaansh
- Re: ODBC - Bulk insert using column binding
- References:
- ODBC - Bulk insert using column binding
- From: hajaansh
- ODBC - Bulk insert using column binding
- Prev by Date: calling a java process with oracle
- Next by Date: Re: Hibernate config in Tomcat
- Previous by thread: ODBC - Bulk insert using column binding
- Next by thread: Re: ODBC - Bulk insert using column binding
- Index(es):