在sql数据库访问中插入多行查询

时间:2012-08-22 20:09:05

标签: sql vb.net ms-access

我试图在数据库中的列表视图中插入项目。如果我尝试单独插入每个记录,如果有更多记录(甚至超过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&“;”),然后它会出现语法错误。

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分: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