gpt4 book ai didi

mysql - 如何通过另一个数据表中的数据更新空数据表

转载 作者:行者123 更新时间:2023-12-04 07:15:35 25 4
gpt4 key购买 nike

我有 2 个服务器,它们包含具有相同结构的相同数据库(主服务器 + 子服务器)。

  • 我从子服务器的表中删除了所有数据。
  • 我从主服务器的表中获取数据并将其放入Datatable。
  • 我从server2的Datatable中复制了数据。
  • 我使用 Dataadapter2 更新子服务器中的表。

  • 但是,子服务器还是空的?!
    'Delete Data From The Sub Server
    xSlConn.Open()
    Dim xcmddelete As New MySqlCommand("Delete FROM tblplaces", xSlConn)
    xcmddelete.ExecuteNonQuery()


    'Get Data Drom The Main Server
    Conn.Open()
    Dim xcmd1 As New MySqlCommand("SELECT * FROM tblplaces", Conn)
    Dim xdt1 As New DataTable
    Dim xda1 As New MySqlDataAdapter(xcmd1)
    xda1.Fill(xdt1)



    'Preparing the datatable for the Sub Server
    Dim xcmd As New MySqlCommand("SELECT * FROM tblplaces", xSlConn)
    Dim xdt2 As New DataTable
    Dim xda2 As New MySqlCommand(xcmd)
    Dim xB As New MySqlCommandBuilder(xda2)
    xda2.Fill(xdt2)

    'Copt the data from the main datatable to the sub datatable
    xdt2 = xdt1.Copy()

    'Update The Datatable2
    xB.GetUpdateCommand()
    xda2.Update(xdt2)

    最佳答案

    xda2.Fill(xdt2)


    这行代码没用;下一行代码无论如何都会抛出 xdt2

    xdt2 = xdt1.Copy()


    这一行复制了数据表。它不会设置 xdt2 中的所有行成为 RowStateAdded ,这是数据适配器需要它们才能在它们上运行插入
    数据适配器检查每一行的 RowState。 Unchanged行被忽略。 Added对它们运行 INSERT 命令, Modified映射到更新, Deleted映射到 DELETE 查询
    现在 xdt1 中的所有行都是 Unchanged因为数据适配器叫 AcceptChanges将它们添加到表中之后

    现在..你根本不需要复制数据;您可以将 xdt1 中的所有行设置为添加,以便 xdt2 适配器将在它们上使用其 INSERT 命令。此外,应该可以在 insertcommand 上交换连接
    'Get Data Drom The Main Server
    Dim dt As New DataTable
    Dim da As New MySqlDataAdapter("SELECT * FROM tblplaces", Conn)
    da.Fill(dt)
    Dim xB As New MySqlCommandBuilder(da)
    da.InsertCommand.Connection = xSlConn

    For Each ro as DataRow in xdt1.Rows
    ro.SetAdded()
    Next ro
    da.Update(dt)

    或者,您可以简单地请求 xda1适配器根本不会对它们调用 AcceptChanges,因此它们将处于已添加状态:
    'Get Data Drom The Main Server
    Dim dt As New DataTable
    Dim da As New MySqlDataAdapter("SELECT * FROM tblplaces", Conn)
    da.AcceptChangesDuringFill = False
    da.Fill(dt)
    Dim xB As New MySqlCommandBuilder(da)
    da.InsertCommand.Connection = xSlConn
    da.Update(dt)
    或者,如果您要推送到不同的数据库
    'Get Data Drom The Main Server
    Dim dt As New DataTable
    Dim da As New MySqlDataAdapter("SELECT * FROM tblplaces", Conn)
    da.AcceptChangesDuringFill = False
    da.Fill(dt)

    Dim da2 as New SqliteDataAdapter("SELECT * FROM tblplaces", "put a connection string here")
    Dim xB As New SqliteCommandBuilder(da2)
    da2.Update(dt)
    笔记;后一个示例使用例如 SQLite 作为为不同的数据库声明两个不同类型的不同适配器的演示 - 它不保证例如您使用的特定 SQLite 库实际上包含一个数据适配器实现(有些不)

    关于mysql - 如何通过另一个数据表中的数据更新空数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68794155/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com