我正在开发一个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."));
}
答案 0 :(得分:0)
根据我对CookieContainer
和Oracle
的体验,SQL Server
语句的发生方式存在差异。您看到的行为暗示commit
未隐式提交。
在Update
中,提交是明确的声明,需要在执行某些事务后进行。
在Oracle
中,默认情况下提交是隐式的,不需要在事务之后执行。
话虽如此,另外其他Stack Overflow Question and Answer似乎有两种方法在SQL Server中明确提交提交,这意味着如果没有提交,您可能会丢失事务。
首先,您可以使用SQL Server
让数据库等待commit语句。从您发布的内容来看,情况似乎并非如此。
在SQL Server中显式BEGIN TRANSACTION
语句的另一种方法是更改数据库本身的某些设置。根据您的想法,我会检查此处提到的帖子中提到的设置,并确保您没有隐式提交。