0

データベースのリストビューにアイテムを挿入しようとしました。すべてのレコードを個別に挿入しようとすると、レコードが多い場合(5を超える場合でも)に時間がかかります。私は現在このコードを使用しています:

 For Each ls As ListViewItem In ListItems.Items
      strSQL = String.Format("insert into tbltrans (transid,itemcode,itemname,qty,price,[total],btw) values ('{0}','{1}','{2}',{3},{4},'{5}','{6}')", CStr(txtTransId.Text), CStr(ls.Tag), ls.SubItems(0).Text, CDbl(ls.SubItems(1).Text), CDbl(ls.SubItems(2).Text), CDbl(ls.SubItems(3).Text), ((ls.SubItems(5).Text)))
                objDal.ExecuteQuery(strSQL)
Next

だから、私がやりたいのは、1つのSQLクエリですべての項目を実行することです。私はこれを試しましたが、機能しませんでした:

 strSQL = "insert into tbltrans (transid,itemcode,itemname,qty,price,[total],btw) values  "
 For Each ls As ListViewItem In ListItems.Items
                    strSQL += tring.Format("('{0}','{1}','{2}','{3}','{4}','{5}','{6}')", CStr(txtTransId.Text), CStr(ls.Tag), ls.SubItems(0).Text, CDbl(ls.SubItems(1).Text), CDbl(ls.SubItems(2).Text), CDbl(ls.SubItems(3).Text), ((ls.SubItems(5).Text)))

                Next
objdal.executequery(strSQL)

ステートメントの最後にセミコロン(;)がないということですが、レコードと(strsql& ";")に追加しようとすると、構文エラーが発生します。

誰か助けてもらえますか?

4

1 に答える 1

1

同じコマンド/接続オブジェクトと同じ(再構築されていない)SQL文字列を次のように再利用することで、もう少しうまくいくことができます(列のタイプと長さを推測する必要がありました):

strSQL = "insert into tbltrans (transid,itemcode,itemname,qty,price,[total],btw) values ( ?,?,?,?,?,?,?)"

Using cn As New OleDbConnection("Connection string here"), _
      cmd As New OleDbCommand(strSQL, cn)

    cmd.Parameters.Add("?", OleDbType.Integer).Value = Integer.Parse(txtTransId.Text)
    cmd.Parameters.Add("?", OleDbType.VarChar, 10)
    cmd.Parameters.Add("?", OleDbType.VarChar, 50)
    cmd.Parameters.Add("?", OleDbType.Integer)
    cmd.Parameters.Add("?", OleDbType.Decimal)
    cmd.Parameters.Add("?", OleDbType.Decimal)
    cmd.Parameters.Add("?", OleDbType.VarChar, 50)

    cn.Open()
    For Each ls As ListViewItem In ListItems.Items
        cmd.Parameters(1).Value = ls.Tag
        cmd.Parameters(2).Value = ls.SubItems(0).Text
        cmd.Parameters(3).Value = Integer.Parse(ls.SubItems(1).Text)
        cmd.Parameters(4).Value = Decimal.Parse(ls.SubItems(2).Text)
        cmd.Parameters(5).Value = Decimal.Parse(ls.SubItems(3).Text)
        cmd.Parameters(6).Value = ls.SubItems(5).Text
        cmd.ExecuteNonQuery()
    Next ls

End Using
于 2012-08-22T20:28:53.890 に答える