更新数据库 MFC C++ ODBC CRecordset
Posted
技术标签:
【中文标题】更新数据库 MFC C++ ODBC CRecordset【英文标题】:Update Database MFC C++ ODBC CRecordset 【发布时间】:2016-11-10 13:40:57 【问题描述】:我正在开发一个 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】:根据我对Oracle
和SQL Server
的经验,commit
语句的发生方式有所不同。您看到的行为暗示 Update
没有被隐式提交。
在Oracle
中,commits 是一个显式的声明,需要在你执行了一些事务之后再执行。
在SQL Server
中,提交默认是隐式的,不需要在事务之后进行。
话虽如此,另一个 Stack Overflow Question and Answer 似乎有两种方法可以在 SQL Server 中显式提交,这意味着如果没有提交,您可能会丢失事务。
首先,您可以使用BEGIN TRANSACTION
让数据库等待提交语句。从您发布的内容来看,情况似乎并非如此。
在 SQL Server 中使commit
语句显式化的另一种方法是更改数据库本身的一些设置。根据您的思路,我将检查此处提到的帖子中提到的设置,并确保您没有隐式提交。
【讨论】:
以上是关于更新数据库 MFC C++ ODBC CRecordset的主要内容,如果未能解决你的问题,请参考以下文章
MFC ODBC SQLConfigDataSource() 未处理的异常