我有一个名为isadded()的函数,这是我的程序崩溃的原因。我运行debugdiag并找到了这个
Function Arg 1 Arg 2 Arg 3 Source
ntdll!RtlpWaitOnCriticalSection+df 00001484 00000002 00000000
ntdll!RtlEnterCriticalSection+a8 09e10c08 006310a5 09e10c08
sqlite3!sqlite3_mutex_leave+17b 09caf370 0c81d9c8 0063d240
sqlite3!sqlite3_get_table+99 09caf370 0c81d9c8 0c81d9bc
OServHandler!COServHandler::isAdded+17f 059a6fd8 0c8272e0 00000006
OServHandler!COServHandler::getHierarchy+ba7 0c940020 00008000 6009fb27
AdminConsoleInterface!CAdminConsoleInterface::handleConnection+178 00001254 00000000 00000000
AdminConsoleInterface!CAdminConsoleInterface::setOServHandler+33 008c5cd0 0250e9c8 00000000
因此,它出错的行是sqlite3_get_table()。
sprintf_s(query,1024,"SELECT * FROM OServs WHERE oservname = '%s' ;", cOServID);
cout<<query<<endl;
rc = sqlite3_get_table(db, query, &results, &nrow, &ncol, &zErrMsg);
基本上我试图查看数据库中是否已添加特定变量。有没有替代这个功能,因为它似乎崩溃了?我记得读过这个函数已被弃用,但不知道替代方案是什么。
答案 0 :(得分:3)
您使用少量命令来替换sqlite3_get_table
。以下是解释该过程的basic c/c++ intro教程。你必须做更多的工作,但还有更多的控制权。
sqlite3 reference的功能部分详细记录了每一个。
更新
作为替代方案,你可以使用sqlite3_exec,它有点不太强烈。这是我找到的一个小代码示例。