【问题标题】:How do I copy 1 row from table A to same schema table b in VB Net如何在 VB Net 中将表 A 中的 1 行复制到相同的模式表 b
【发布时间】:2016-04-05 15:41:47
【问题描述】:

这是我一直在尝试的。问题似乎在于将数据集提交到数据库,因为我可以在控制台中看到数据表。

我在更新前后都尝试了 AcceptChanges,当我查看状态时它显示为已添加。

代码如下:

   Dim ds As DataSet = New DataSet()
    Dim tblPicture As DataTable
    Dim tblNewPics As DataTable
    Dim tblPictureCount As Integer
    Dim i As Integer

    Dim conn As SqlConnection = New SqlConnection("Server=R850-PC\SQLEXPRESS2012;database=NewParts;Integrated Security=True;Persist Security Info=False")
    Dim da As SqlDataAdapter = New SqlDataAdapter("Select * from Picture Where IsNew = 1", conn)
    da.Fill(ds, "Picture")
    tblPicture = ds.Tables("Picture")
    tblPictureCount = tblPicture.Rows.Count
    tblPictureCount = tblPictureCount - 1

    'SOURCE Picture table to the screen.
    Console.WriteLine("Source Table tblPicture has " & tblPictureCount.ToString & " Rows")

    For i = 0 To tblPictureCount
        Console.WriteLine("Row(" & i.ToString & ") = " & tblPicture.Rows(i)(3))
    Next

    '********************* ADD TO NEW TABLE DATA **************************************************************************************

    Dim da2 As SqlDataAdapter = New SqlDataAdapter("Select * from Picture_Temp", conn)
    da2.Fill(ds, "Picture_Temp")
    tblNewPics = ds.Tables("Picture_Temp")
    tblNewPics = tblPicture.Clone

    For i = 0 To tblPictureCount
        tblNewPics.ImportRow(tblPicture.Rows(i))
        Dim dr2 As DataRow = tblNewPics.Rows(i)
        dr2.SetAdded()
    Next
    da2.Update(ds.Tables("Picture_Temp"))
    tblNewPics.AcceptChanges()

    '******************* DEBUG ... check new database table
    Console.WriteLine()
    Console.WriteLine("Destination TABLE has " & tblNewPics.ToString & " Rows")
    For i = 0 To tblPictureCount
        Console.WriteLine("Row(" & i.ToString & ") = " & tblNewPics.Rows(i)(3))
    Next
    Console.WriteLine("RowState = " & tblNewPics.Rows(i - 1).RowState.ToString)
    Console.ReadLine()

    txtMessages.Text = "Done"

结束子

有什么想法吗??

【问题讨论】:

标签: vb.net


【解决方案1】:

您应该删除该克隆行。制作克隆意味着您正在创建一个新的 DataTable。因此,当您调用 Update 时,旧的仍然是空的(或者填充时存在的任何内容)。
如果当前表已经具有正确的架构,则无需调用 Clone

您还需要将SqlCommandBuilder 链接到您的DataAdapter。该对象将负责创建更新表所需的适当 sql 语句

 Dim builder = new SqlCommandBuilder(da2)
 da2.Update(ds.Tables("Picture_Temp"))

【讨论】:

  • 做到了!非常感谢您的反馈。我被困在上面,显然不知道自己在做什么,但是,无论如何,那里的努力……很慢,但我猜是肯定的。再次感谢您的帮助!
  • 很高兴能对@QEDDave 有所帮助,但是在查看了您过去的历史后,我建议您阅读How does accepting an answer work?
猜你喜欢
  • 2012-10-03
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
相关资源
最近更新 更多