代码之家  ›  专栏  ›  技术社区  ›  Dester Dezzods

使用oledb参数在访问数据库中插入多行

  •  1
  • Dester Dezzods  · 技术社区  · 12 年前

    我正在尝试使用参数将列表项中的多行插入数据库。 但它不会给我任何错误,也不会在表中插入任何数据。 有人对此有什么想法吗?

      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
    
    1 回复  |  直到 12 年前
        1
  •  4
  •   Steve    12 年前

    您缺少执行部分

    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。