更新数据库MFC C ++ ODBC CRecordset

时间:2016-11-10 13:40:57

标签: c++ sql-server mfc odbc sdi

我正在开发一个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."));
}

1 个答案:

答案 0 :(得分:0)

根据我对CookieContainerOracle的体验,SQL Server语句的发生方式存在差异。您看到的行为暗示commit未隐式提交。

Update中,提交是明确的声明,需要在执行某些事务后进行。

Oracle中,默认情况下提交是隐式的,不需要在事务之后执行。

话虽如此,另外其他Stack Overflow Question and Answer似乎有两种方法在SQL Server中明确提交提交,这意味着如果没有提交,您可能会丢失事务。

首先,您可以使用SQL Server让数据库等待commit语句。从您发布的内容来看,情况似乎并非如此。

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