【问题标题】:Update Database MFC C++ ODBC CRecordset更新数据库 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."));
}

【问题讨论】:

  • 你需要提交

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


【解决方案1】:

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

Oracle 中,commits 是一个显式的声明,需要在你执行了一些事务之后再执行。

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

话虽如此,另一个 Stack Overflow Question and Answer 似乎有两种方法可以在 SQL Server 中显式提交,这意味着如果没有提交,您可能会丢失事务。

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

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

【讨论】:

    猜你喜欢
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 2021-10-20
    相关资源
    最近更新 更多