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

所以,我想做的是在一个 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 回答