【问题标题】:Append Datatable in VB在VB中追加数据表
【发布时间】:2013-05-13 08:07:52
【问题描述】:

我正在vb 中开发 Windows 应用程序,我想在datatable 中附加值并使用while loop,如下所示。

 If hscode <> "" Then
            da1 = New OleDbDataAdapter("select * from [" & tablename & "] where [ItemNo] like '" & hscode & "%'", myConnection)
            da1.Fill(dt2)
            dtab = dt2.Clone

            dtab.Merge(dt2, True)


            Dim l As Integer
            l = 0
            For l = 0 To dt2.Rows.Count - 1
                dtab = dt2.Clone
                dtab.ImportRow(dt2.Rows(l))
            Next
            dt2.Clear()

        End If

在上面的代码中,当datatable 第一次填充时,它在DTAB datatable 中只占用one row。它第二次抛出error。 谁能告诉我如何concatenate 两个datatable。实际上我想在一个gridview 中显示多个数据库值,具体取决于一些queries

【问题讨论】:

  • 你为什么在每次循环执行中都使用 dtab=dt2.clone

标签: vb.net gridview datatable while-loop dataadapter


【解决方案1】:

我看不到您的其余代码,但就像现在一样,填充数据表 (dt2)、将其结构克隆到另一个表 (dtab) 中然后循环 @ 是没有意义的987654324@ 行并将这些行导入dtab
你可以简单地填写 dtab

但是,假设您出于其他原因需要将 dtab 与 dt2 分开,那么我认为如果您使用 DataTable 的 Copy 方法,您几乎可以删除所有代码

If hscode <> "" Then
     da1 = New OleDbDataAdapter("select * from [" & tablename & "] where [ItemNo] like '" & hscode & "%'", myConnection)
     da1.Fill(dt2)
     dtab = dt2.Copy()
     dt2.Clear()
End If

另外,我还认为您应该更改原始查询以避免字符串连接并使用这样的参数化查询

....
Dim queryText = "select * from [" & tablename & "] where [ItemNo] like ?"
da1 = New OleDbDataAdapter(queryText, myConnection)
da1.SelectCommand.Parameters.AddWithValue("@p1", hscode & "%")
....

这将避免 Sql 注入和解析 hscode 值的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2020-11-25
    相关资源
    最近更新 更多