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
,然后关闭连接。您在本地所做的任何更改只会影响该本地副本。当您调用 Update
或 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
,然后关闭连接。您在本地所做的任何更改只会影响该本地副本。当您调用 Update
或 UpdateAll
时,会再次打开连接并将本地更改保存到数据库中。