0

以下に示すように、vb値を追加したい場所でWindowsアプリを開発しています。datatablewhile 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は、 が初めて読み込まれるときに のみを取り込みone rowますDTAB datatable。そして 2 回目はerror. 誰かconcatenate2 のやり方を教えてくださいdatatablegridview実際には、いくつかに応じて複数のデータベース値を 1 つに表示したいと考えていますqueries

4

1 に答える 1

0

コードの残りの部分はわかりませんが、現状では、データテーブルを埋め ( dt2)、その構造を別のテーブルに複製し( )、行をdtabループしてdt2これらの行を にインポートするのは意味がありませんdtab
単純に dtab を埋めることができます

ただし、他の理由で dt2 とは別に dtab が必要であると仮定すると、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 値の解析に関する問題が回避されます。

于 2013-05-18T08:14:28.797 に答える