问题描述
- [ODBC Microsoft Access Driver]非法的游标状态 ????
-
char sql[81];sprintf(sqlINSERT INTO studen (xingmingxuehaosexage) VALUES ('%s'%d'%s'%d)""namenumxxsexnAge);// inserts a new row to the tableint count = db.Execute(sql);
以上代码是通过ODBC插入一个记录,编程语言是C++。
但是db.Execute后,运行提示“""[Microsoft][ODBC Microsoft Access Driver]非法的游标状态 ""
”网上搜索不到解决方法,只好求助各位了
xingming 是数据库的姓名字段;
xuehao 是代表学号,数字类型
解决方案
请参考以下内容:
ODBC连接数据持续执行两次sql语句结果提示:[Microsoft][ODBC Microsoft Access Driver]非法的游标状态
例如:
sprintf(sqlStrselect passCode from passCode_t where stationCode='A01' and currentDate='2011-03-19'"");
connectDB_ACCESS(); //连接ACCESS数据库
retcode = SQLExecDirect(hstmtAcc(SQLCHAR *)sqlStrSQL_NTS);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
retcode=SQLBindCol(hstmtAcc1SQL_C_CHARpassCode_str4&cb);
while (TRUE)
{
retcode = SQLFetch(hstmtAcc);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){
}else {
break;
}
}
}
//紧接着执行下面的语句
sprintf(sqlStrupdate passCode_t set passCode='001' where stationCode='A01' and currentDate='2011-03-19'"");
retcode = SQLExecDirect(hstmtAcc(SQLCHAR *)sqlStrSQL_NTS);
结果提示上面开头处的错误!
在第一次执行完语句后调用:
retcode = SQLCloseCursor(hstmtAcc);
retcode = SQLFreeStmt(hstmtAcc SQL_CLOSE);
通过微软的sql server资料了解到http://support.microsoft.com/kb/253010/zh-cn
引用:
允许在单个连接上的多个并发的语句句柄的方式使用 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。