更新数据库mfcc++ ODBC CRecordset

Update Database MFC C++ ODBC CRecordset

本文关键字:CRecordset ODBC mfcc++ 数据库 更新      更新时间:2023-10-16

我正在开发一个MFC应用程序(SDI)来更新、添加和删除数据库中称为security的表。问题是在更新表中的一行之后,行被更新(i验证),然后当我执行另一个操作(更新另一行或删除一行)时,更新被取消。我真的不知道是否有一个问题与CRecordset或数据库本身。

//m_pSet is a an instance of a class based on CRecordSet:
m_pSet->Open();
m_pSet->Edit();
m_pSet->m_Security_Id = sec->SecurityId;
m_pSet->m_Security_Name = sec->SecurityName;
m_pSet->m_Security_Type_Id = sec->SecurityTypeStringToInt();
if (!m_pSet->Update())
{
    AfxMessageBox(_T("Record not updated; no field values were set."));
}

根据我对OracleSQL Server的经验,commit语句发生的方式是不同的。您看到的行为暗示Update没有隐式地提交。

Oracle中,提交是一个显式的语句,需要在你执行了一些事务之后执行。

SQL Server中,提交默认是隐式的,不需要在事务之后执行。

话虽这么说,这个其他的堆栈溢出问答似乎有两种方法在SQL Server中显式提交,这意味着没有提交,你可能会丢失事务。

第一个是你可以使用BEGIN TRANSACTION让数据库等待一个提交语句。从你的帖子来看,情况似乎并非如此。

另一种在SQL Server中使commit语句显式的方法是通过更改数据库本身的一些设置。根据您的思路,我会检查此处提到的帖子中提到的设置,并确保您没有隐式提交。