2012-08-22 50 views
0

我試圖在數據庫的列表視圖中插入項目。如果我試圖單獨插入每條記錄,如果有更多記錄(甚至超過5條記錄),則需要很長時間。 即時通訊目前使用此代碼:在sql數據庫中插入多行查詢

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 &「;」) ,那麼它會給出語法錯誤。

誰能幫助嗎?

+0

即使對於單個記錄,你也做錯了。像這樣的String.Format()容易受到sql注入的影響。 –

+0

只是爲了說明@Joel在說什麼,你應該考慮參數化查詢,如果你不是那麼肯定,請在「sql參數化查詢」上進行搜索 – spacemonkeys

回答

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 
+0

Joel,謝謝。我可以通過電子郵件與我聯繫,以便我可以發送你我的項目。我實際上對vb和sql很陌生,所以我無法弄清楚上面的代碼。我會把你的項目寄給你。 –

+0

好的,我試過但沒有工作。它沒有保存任何記錄 –

+0

缺少一條線,現在應該會更好。 –