高分求解使用SQLLite遇到的有关问题

高分求解使用SQLLite遇到的问题
如下红字部分,我使用insert创建记录时是正确的,但第二次我是用update该数据时,函数调用显示正常,但数据库内容没有做相应更改,请问是什么原因,该如何修改。

C/C++ code
bool CSpeUiXApp::SaveRerviroInfs()
{
    USES_CONVERSION;
    try
    {
        for (int i = 0; i < 4; i++)
        {
            char _szName[64];
            sprintf_s(_szName, 63, ("infreserviorname%d"), i);
            char _sz[256];
            sprintf_s(_sz, 255, "select ParamValue from Params where ParamName='%s'", _szName);
            CppSQLite3Query q = m_dbSpe.execQuery(_sz);
            if (q.eof())
                sprintf_s(_sz, 255, "insert into Params values('%s','%s');", _szName , W2A(theDefaultReserviorInfName.m_strBottleTag[i]));
            else
            {
                q.nextRow();
                [color=#FF0000]sprintf_s(_sz, 255, "update Params set ParamValue = '%s' where ParamName='%s';" ,_szName ,W2A(theDefaultReserviorInfName.m_strBottleTag[i]));[/color]            }

            m_dbSpe.execDML(_sz);

            sprintf_s(_szName, 63, ("bigbottlreserviorname%d"), i);

            sprintf_s(_sz, 255, "select ParamValue from Params where ParamName='%s'", _szName);
            q = m_dbSpe.execQuery(_sz);
            if (q.eof())
                sprintf_s(_sz, 255, "insert into Params values('%s','%s')", _szName , W2A(theDefaultReserviorInfName.m_strBigBottleTag[i]));
            else
            {
                sprintf_s(_sz, 255, "update Params set ParamValue = '%s' where ParamName='%s';",_szName , W2A(theDefaultReserviorInfName.m_strBigBottleTag[i]));
                q.nextRow();
            }

            m_dbSpe.execDML(_sz);
        }
    }
    catch (CppSQLite3Exception& e)
    {
        cout << e.errorCode() << ":" << e.errorMessage() << endl;
        return false;
    }

    return true;
}


------解决方案--------------------
UPDATE 语句是什么,在SQLITE中直接运行能否成功,表是否有约束、主键、外键,是否有提示
------解决方案--------------------
_sz是对的。
内容是什么,在SQLITE中直接运行能否成功,提示什么,直接出错?
------解决方案--------------------
把sql语句打出来,执行一下子看看