BindingSource.EndEdit() 对比 TableAdapterManager.UpdateAll()

BindingSource.EndEdit() vs TableAdapterManager.UpdateAll()

在 .NET 框架中,为了将数据保存到数据库项中,必须使用:

Me.Validate();
Me.CustomersBindingSource.EndEdit();
Me.TableAdapterManager.UpdateAll(Me.CustomerDataSet);

谁能解释一下为什么?幕后发生了什么?如果 .EndEdit() "applies changes to the underlying data source" 为什么应用这些更改还不够?

"apply those changes"...到数据源就够了。数据源是一个 DataTable,它是您应用程序中的一个对象。 UpdateAll 调用将 DataTable 中的更改保存到数据库中。DataTable - 事实上,所有 DataTables 在你的 DataSet 中。

ADO.NET 基于断开连接的模型。这意味着您的应用程序没有直接连接到您的数据库。在 VB6 中使用 ADO,您对 Recordset 所做的更改将直接对数据库进行。 ADO.NET 并非如此。当您调用 Fill 时,将打开与数据库的连接,数据从数据库复制到 DataTable,然后关闭连接。您在本地所做的任何更改只会影响该本地副本。当您调用 UpdateUpdateAll 时,会再次打开连接并将本地更改保存到数据库中。