前辈们帮我看看,事务锁的问题
RetCode = SQLPrepare(StmtHandle, SQLStmt, SQL_NTS);
sleep(20);
RetCode = SQLExecute(StmtHandle);
if (RetCode == SQL_SUCCESS)
{
SQLBindCol(StmtHandle, 1, SQL_C_CHAR, (SQLPOINTER)
name, sizeof(name), NULL);
SQLBindCol(StmtHandle, 2, SQL_C_CHAR, (SQLPOINTER)
age, sizeof(age), NULL);
while (RetCode != SQL_NO_DATA)
{
RetCode = SQLFetch(StmtHandle);
if (RetCode != SQL_NO_DATA)
printf("%-8s %s\n", name, age);
}
}
printf("Tran completed.\n");
RetCode = SQLEndTran(SQL_HANDLE_DBC, ConHandle,
SQL_COMMIT);
按说SQLPrepare()会自动开启事务并加锁,可在执行程序等待的20秒里,我可以随便往表里插入数据
这怎么回事啊
[解决办法]
这跟隔离级别有关,如果你要事务期间不能插入数据就把隔离级别设置为RR,在你的SQL语句后面加上WITH RR就行了。下面贴点关于隔离级别的内容供你参考: