【问题标题】:How update a SQL table from a modified datatable?如何从修改后的数据表更新 SQL 表?
【发布时间】:2012-01-21 02:22:34
【问题描述】:

我使用数据集设计器创建了 FTWDataSet,它保存了 SQLExpress 数据库中的 AlarmText 表。到目前为止,我的表单仅包含 Datagridview1。下面的代码成功地显示了 AlarmText 表的内容以及一个添加的复选框列(我将填充仅显示数据,这里不是问题)。

    Dim ta As New FTWDataSetTableAdapters.AlarmTextTableAdapter
    Dim dt As New FTWDataSet.AlarmTextDataTable
    ta.Fill(dt)
    DataGridView1.DataSource = dt

    'create a new Bool column in the datatable
    dt.Columns.Add("NewCol", (New Boolean).GetType)

我还需要做什么才能使用 DataGridView 在 AlarmText 表中编辑和保存值?

【问题讨论】:

    标签: vb.net ado.net


    【解决方案1】:

    这是关于此主题的简短 MSDN walkthrough

    一些注意事项:

    • 您不需要绑定源将更改持久化回数据库。
    • 要使表格适配器可被表单中的其他过程访问,请将其设置为表单范围(也称为成员)变量,而不是方法范围,如您的示例中所示。
    • 如果您使用数据集设计器创建了Dataset,并且您从简单表或视图之外的任何内容中获取原始数据,那么您的适配器将不知道如何更新原始数据库中的任何内容。在这种情况下,您必须手动配置UPDATE 命令。有关参考,请参阅上述链接中的 TableAdapter 更新命令部分。

    我还应该提到,我避免像瘟疫一样在 ADO.Net 中使用 TableAdapters。从理论上讲,它们非常方便且功能强大。在实践中,它们中的许多(尤其是 Oracle 提供者的那个)是有缺陷的,如果它们不能完全正确地工作,那么你就完蛋了。

    如果您只从一个底层表中提取,适配器应该可以正常工作(所以暂时忽略我的虚无主义建议)。在代码中添加额外的列可能会破坏适配器(因为数据库表中没有对应的列)。

    【讨论】:

    • 是的,我认为会涉及到一个表适配器和绑定源。但是我没有绑定源,并且在我展示的代码(Load 事件)中引用的表适配器无法从任何其他过程访问。
    • 我将 dim ta 移动为 New 。 . .声明到表单的公共类声明下。我还在表单中添加了一个名为 DataSet1 的 DataSet 组件,其中引用了我在 Designer 中创建的数据集。然后我将 ta.Update(Me.DataSet1.AlarmText) 添加到 DataGridView Validated 事件中。这一切都在运行,但没有任何东西被保存。 Validated 事件肯定会触发。感谢您一直以来的帮助 。 . .
    • 还将 ta.Update(Me.DataSet1.AlarmText) 移至网格的 CellValueChanged 事件。仍然没有保存。
    • 在我上面的链接中,转到 TableAdapter 更新命令部分。如果您使用数据集设计器创建了数据集,并且您从简单的表或视图之外的任何内容中获取原始数据,那么您的适配器将不知道如何更新原始数据库中的任何内容。在这种情况下,您必须手动配置 UPDATE 命令。
    • 所以我回到将数据表从 DataSource 窗格拖到表单上,然后仅向 dataviewgrid 添加额外的列。 TableAdapter Update 方法适用于作为数据表一部分的列。非常感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多