strcpy((char *)sql,"select number from test where ID = '1002'");
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt);
retcode = SQLExecDirect(hstmt,sql,SQL_NTS);
retcode = SQLFetch(hstmt);
SQLGetData(hstmt,1,SQL_C_SLONG,&number,0,&cbKey);
if (number>0)
{
strcpy((char *)sql,"select number from test where ID = '1002'");
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt);
retcode = SQLExecDirect(hstmt,sql,SQL_NTS);
retcode = SQLFetch(hstmt);
SQLGetData(hstmt,1,SQL_C_SLONG,&number,0,&cbKey);
Sleep(10);
cout<<"thread2:"<<number<<endl;
strcpy((char *)sql,"update test set number=number-1 where ID = '1002'");
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt);
retcode = SQLExecDirect(hstmt,sql,SQL_NTS);
}
else
break;
}
cout<<"thread 2 is running"<<endl;
SQLFreeHandle(SQL_HANDLE_STMT,hstmt);
return 0;
}
DWORD WINAPI ThreadTwo(LPVOID param){
SQLHSTMT hstmt = 0;
RETCODE retcode;
SQLTCHAR sql[60]={0};
SQLINTEGER number;
SQLINTEGER cbKey;
while(TRUE)
{
strcpy((char *)sql,"select number from test where ID = '1002'");
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc2, &hstmt);
retcode = SQLExecDirect(hstmt,sql,SQL_NTS);
retcode = SQLFetch(hstmt);
SQLGetData(hstmt,1,SQL_C_SLONG,&number,0,&cbKey);
if (number>0)
{
strcpy((char *)sql,"select number from test where ID = '1002'");
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc2, &hstmt);
retcode = SQLExecDirect(hstmt,sql,SQL_NTS);
retcode = SQLFetch(hstmt);
SQLGetData(hstmt,1,SQL_C_SLONG,&number,0,&cbKey);
Sleep(10);
cout<<"thread3:"<<number<<endl;
strcpy((char *)sql,"update test set number=number-1 where ID = '1002'");
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc2, &hstmt);
retcode = SQLExecDirect(hstmt,sql,SQL_NTS);
}
else
break;
}
SQLFreeHandle(SQL_HANDLE_STMT,hstmt);
return 0;
}