MFC中数据库调用问题

在一个按钮响应函数下,我先使用数据库查询函数想看看接下来要插入的内容是否有重复,然后经过判断成功红调用插入。
目前是,单独调用插入没问题,加上判断也可以进入正确判断内,但二者同时使用就无法插入了,不知是有一个响应函数内调用两个数据库语句会有问题的可能吗?

MFC中数据库调用通常有以下几个步骤:

  1. 建立数据库连接。使用CDatabase类来连接数据库,通常在CWinApp的InitInstance()函数中进行连接。
c++
CDatabase db;
db.Open(_T("DSN=mydsn;UID=myuid;PWD=mypwd"));

  1. 执行SQL查询。使用CRecordset类来执行查询并获取结果集。
c++
CRecordset rs(&db);
rs.Open(_T("SELECT * FROM mytable"));

  1. 获取字段信息。使用CRecordset::GetFields()获取所有的字段,然后可以获取每个字段的名称、类型等信息。
c++
CDBRecordset rs(&db); 
rs.Open(_T("SELECT * FROM mytable"));
CDBFieldsInfo* pInfo = rs.GetFields();
CString strName = pInfo->m_pFieldInfos->m_strName;  // 字段名
short nType = pInfo->m_pFieldInfos->m_nSQLType;   // 字段类型

  1. 遍历结果集。使用rs.MoveNext()来遍历每条记录,rs["字段名"]来获取字段值。
c++
while(!rs.IsEOF()) {
    CString name = rs["name"];
    int age  = rs["age"];
    rs.MoveNext();
}

  1. 关闭资源。调用CDatabase::Close()关闭数据库连接,CRecordset::Close()关闭记录集。
c++
rs.Close();
db.Close();

这是MFC数据库访问的基本流程和用法。如果在调用数据库时遇到问题,通常是:

  1. 数据库连接字符串错误,检查DSN、UID、PWD是否正确。
  2. SQL语句语法错误,检查SQL语句是否正确。
  3. 没有释放资源,数据库连接或记录集没有关闭,导致错误。
  4. 线程问题,数据库操作需在主线程中进行,否则会失败。
  5. 没有指定字段类型,导致从记录集中获取值失败,需要检查字段信息。

检查下变量是否有冲突
断点看插入语句都对吗