ODBC连接数据持续执行两次sql语句结果提示:[Microsoft][ODBC Microsoft Access Driver]非法的游标状态
例如:
sprintf(sqlStr,"select passCode from passCode_t where stationCode='A01' and currentDate='2011-03-19'");
connectDB_ACCESS(); //连接ACCESS数据库
retcode = SQLExecDirect(hstmtAcc,(SQLCHAR *)sqlStr,SQL_NTS);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
retcode=SQLBindCol(hstmtAcc,1,SQL_C_CHAR,passCode_str,4,&cb);
while (TRUE)
{
retcode = SQLFetch(hstmtAcc);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){
}else {
break;
}
}
}
//紧接着执行下面的语句
sprintf(sqlStr,"update passCode_t set passCode='001' where stationCode='A01' and currentDate='2011-03-19'");
retcode = SQLExecDirect(hstmtAcc,(SQLCHAR *)sqlStr,SQL_NTS);
结果提示上面开头处的错误!
在第一次执行完语句后,调用:
retcode = SQLCloseCursor(hstmtAcc);
retcode = SQLFreeStmt(hstmtAcc, SQL_CLOSE);
通过微软的sql server资料了解到
引用:
允许在单个连接上的多个并发的语句句柄的方式使用 Microsoft SQL Server ODBC 驱动程序 (sqlsrv32.dll) 时,
繁忙的连接可能会留下游标 SQL Server 数据库中打开无警告或通知给用户。发生这种情况主要情况下在一个或多个语句句柄在流水 (仅向前、
只读游标) 模式下工作。
这可以有两个而不是严重的负面影响。第一个副作用是游标可以保持打开,消耗内存并可能会导致锁对记录打开数据库服务器上。第二个的副作用是在非流水 ODBC 的语句句柄上执行语句的后续尝试可能会生成没有明显原因的以下错误:
SQLState: 24000 [Microsoft] [ODBC SQL Server 驱动程序] 无效的游标状态
此
行为发生与 sqlsrv32.dll 驱动程序版本 3.70.0690 (Microsoft 数据访问组件 [MDAC] 2.1 SP2)
和更早版本,并与 sqlsrv32.dll 驱动程序版本 3.70.820 (MDAC 2.5/windows 2000)。
========================================
在流水模式操作正忙于 SQL Server ODBC 驱动程序时没有其他活动发生在连接上直到完成该操作。这包括
sp_cursorclose 调用驱动程序问题时调用
SQLFreeStmt 或
SQLCloseCursor。
当驱动程序出现故障时关闭游标
SQLFreeStmt 和
SQLCloseCursor 这两个返回 SQL_SUCCESS 时,ODBC,要过帐没有错误和失败的迹象是可用于应用程序或用户。但是,光标保持在 SQL Server 中打开,并且该语句句柄仍具有与其关联的光标标识符。
==================================================
阅读(3097) | 评论(0) | 转发(0) |