2012-08-24 107 views
1

我試圖使用參數在列表項中插入多個行到數據庫。 但它不會給我任何錯誤,也不會在表中插入任何數據。 沒有人對此有任何意見嗎?使用oledb參數在訪問數據庫中插入多行

strSQL = "insert into tbltrans2 (transid,itemcode,itemname,qty,price,[total],btw) values (?,?,?,?,?,?,?)" 
    Using cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\POS.mdb"), _ 
      cmd As New OleDbCommand(strSQL, cn) 

     cmd.Parameters.Add("?", OleDbType.VarChar).Value = 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 
     Next ls 

    End Using 

嘿史蒂夫,當我嘗試這樣做時,它給了我更新語句'語法錯誤'錯誤。這裏是我的代碼:

Try 
     strSQL = "UPDATE set instock = ? where itemcode= ?" 
     Using cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\POS.mdb"), _ 
       cmd As New OleDbCommand(strSQL, cn) 
      cn.Open() 
      For Each ls As ListViewItem In ListItems.Items 
       cmd.Parameters.Add("?", OleDbType.Integer).Value = 100 
       cmd.Parameters.Add("?", OleDbType.VarChar).Value = ls.Tag 
       cmd.ExecuteNonQuery() 
      Next ls 
      cn.Close() 
     End Using 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 

現在,我仍然需要減少股票的幫助。這是我使用的代碼,但它不起作用。

strSQL = "UPDATE tblitem set instock ='instock'- ? where itemcode = ?" 
      Using cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\POS.mdb"), _ 
        cmd As New OleDbCommand(strSQL, cn) 
       cn.Open() 
       For Each ls As ListViewItem In SalesListItems.Items 
        If Not (ls.SubItems(1).Tag(0) = "n") Then 
         cmd.Parameters.Add("?", OleDbType.Integer).Value = ls.SubItems(1).Text 
         cmd.Parameters.Add("?", OleDbType.VarChar, 10).Value = ls.Tag 
         cmd.ExecuteNonQuery() 
        End If 
       Next ls 
       cn.Close() 
      End Using 
+0

對不起忘了更新後的表名,回答更新 – Steve

回答

4

你缺少的還有執行部分

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 

,你一定從子項來輸入值?如果在將它們添加到ListView時沒有對其有效數值的控件,那麼當您嘗試使用Parse將所假定的數值轉換時,循環可能會失敗併產生異常。

編輯:這不是一個更新

strSQL = "UPDATE tblitem set instock = ? where itemcode= ?" 
Using cn As New OleDbConnection("......") 
    cmd As New OleDbCommand(strSQL, cn) 
    cmd.Parameters.Add("?", OleDbType.Integer).Value = 100 
    cmd.Parameters.Add("?", OleDbType.VarChar).Value = yourItemCodeValue  
    cmd.ExecuteNonQuery() 
End Using  

請記住,我想是的inStock一個整數數據類型和itemcode一個varchar。

+0

是否可以使用同樣的方法來更新數據庫? 這是我目前使用的: strSQL = String.Format((「update tblitem set inStock ='」&ls.SubItems(1).Tag - ls.SubItems(1).Text&「'where itemcode = 「&ls.Tag&」「)) objDal.ExecuteQuery(strSQL) –

+0

好了,離開它.. 如何使用參數更新數據庫。比如「update tblitem set instock ='value'where itemcode ='value2'? –

+0

回答更新了使用參數的示例更新- – Steve