Dester Dezzods
Dester Dezzods

Reputation: 1535

Insert multiple lines of query in a sql database access

I was trying to insert items in a listview in a database. If I try to insert every records seperately, it takes long if there are more records (even more than 5). Im currently using this code:

 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

So, what I want to do is execute all of the items in one sql query. I tried this, but didn't work:

 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)

It says that it's missing semicolon(;) at the end of the statement, I tried adding them in the records and also (strsql & ";"), then it gives syntax error.

can anyone help please?

Upvotes: 0

Views: 1606

Answers (1)

Joel Coehoorn
Joel Coehoorn

Reputation: 415820

You can do a little better by re-using the same command/connection object and same (not re-constructed) sql string like this (I had to guess at column types and lengths):

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

Upvotes: 1

Related Questions