c# - BindingSource.EndEdit() 与 TableAdapterManager.UpdateAll()
问题描述
在 .NET 框架中,为了将数据保存到数据库项中,必须使用:
Me.Validate();
Me.CustomersBindingSource.EndEdit();
Me.TableAdapterManager.UpdateAll(Me.CustomerDataSet);
有人可以解释我为什么吗?幕后发生了什么?如果 .EndEdit() “将更改应用到基础数据源”,为什么应用这些更改还不够?
解决方案
将这些更改应用到数据源就足够了。数据源是 a DataTable
,它是您的应用程序中的一个对象。该UpdateAll
调用将更改从该更改DataTable
(实际上,所有更改都DataTables
在您的更改中)保存DataSet
到数据库中。
ADO.NET 基于断开连接的模型。这意味着您的应用程序没有直接连接到您的数据库。在 VB6 中使用 ADO,您对 aRecordset
所做的更改是直接对数据库进行的。在 ADO.NET 中并非如此。当您调用 时Fill
,将打开与数据库的连接,将数据从数据库复制到 a 中DataTable
,然后关闭连接。您在本地进行的任何更改都只会影响该本地副本。当您调用Update
orUpdateAll
时,连接会再次打开,并且本地更改会保存到数据库中。
推荐阅读
- java - 将路径附加到 Java 中的 HttpUrlConnection
- c++ - Magick++ 合成算法中的内存泄漏
- sql - 转换为关系代数
- c++ - 当应用于不相关的指针时,std::less 如何比 < 更安全?
- ios - 斯威夫特用户界面 | 文本字段未读取输入的值
- c++ - 像这样初始化 int 向量有什么问题:vector
v1 = {1, 2, 3, 4}? - perl - Perl “do { ... } if ...” 作为表达式
- python - 如何引入while循环以计算月利率?
- ios - 架构 XXX 的未定义符号 - 在 Xcode 12.1 中
- javascript - OSX 上的 Chrome:CSS 过渡立即应用于 div 的第二个克隆