0

我正在开发一个 MFC 应用程序 (SDI) 来更新、添加和删除数据库中名为 security 的表。问题是在更新表中的一行后,该行已更新(我已验证)然后当我执行另一个操作(更新另一行或删除一行)时,更新被取消。我真的不知道是 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."));
}
4

1 回答 1

0

根据我的经验,Oracle陈述发生SQL Server的方式有所不同。commit您看到的行为暗示Update没有隐式提交。

Oracle中,提交是一个显式声明,需要在您执行某些事务后执行。

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

话虽如此,这个其他堆栈溢出问题和答案似乎有两种方法可以在 SQL Server 中明确提交,这意味着如果没有提交,您可能会丢失事务。

第一个是您可以BEGIN TRANSACTION用来让数据库等待提交语句。从您发布的内容来看,情况似乎并非如此。

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

于 2016-11-18T14:36:36.070 回答