sqlite3_get_table的替代品

时间:2011-09-13 13:30:44

标签: c++ visual-c++ select sqlite

我有一个名为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);

基本上我试图查看数据库中是否已添加特定变量。有没有替代这个功能,因为它似乎崩溃了?我记得读过这个函数已被弃用,但不知道替代方案是什么。

1 个答案:

答案 0 :(得分:3)

您使用少量命令来替换sqlite3_get_table。以下是解释该过程的basic c/c++ intro教程。你必须做更多的工作,但还有更多的控制权。

sqlite3 reference的功能部分详细记录了每一个。

更新

作为替代方案,你可以使用sqlite3_exec,它有点不太强烈。这是我找到的一个小代码示例。

http://souptonuts.sourceforge.net/code/simplesqlite3.c.html