使用具有相同名称的项目仅更新数据库中的1行

时间:2014-05-25 19:46:46

标签: vb.net datagridview sql-update

我有一个datagridview和一个按钮,当点击按钮时,应该更新行。一切正常,直到我必须更新具有相同名称的项目(TICKER),然后更新具有该名称的所有项目。

即使ID不可见,是否有可能根据ID更新行?

这是我的代码:

 Dim myCONN As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=w:\Portfolio.mdb")
                       Dim query As String = "UPDATE PFT SET [Sell Price]=?, [G/L (USD)]=?, [G/L (%)]=?, BS=? WHERE TICKER=?"

            myCONN.Open()

            Using cmd As New OleDbCommand(query, myCONN)

                cmd.Parameters.AddWithValue("[Sell Price]", Label7.Text)
                cmd.Parameters.AddWithValue("[G/L (USD)]", Label18.Text)
                cmd.Parameters.AddWithValue("[G/L (%)]", Label28.Text)
                cmd.Parameters.AddWithValue("BS", "S")
                cmd.Parameters.AddWithValue("TICKER", Label26.Text)


                cmd.ExecuteNonQuery()
            End Using
            myCONN.Close()

1 个答案:

答案 0 :(得分:1)

由于你有一个ID,你只需要将它添加到SQL然后传递的值 您要更新的行的ID:

Dim query As String = "UPDATE PFT SET [Sell Price]=?, [G/L (USD)]=?, 
        [G/L (%)]=?, BS=? WHERE (TICKER=? AND ID = ?) "

myCONN.Open()

Using cmd As New OleDbCommand(query, myCONN)
    ' OleDb just maps values based on ? positions in SQL
    cmd.Parameters.AddWithValue("@p1", Label7.Text)
    cmd.Parameters.AddWithValue("@p2", Label18.Text)
    cmd.Parameters.AddWithValue("@p3", Label28.Text)
    cmd.Parameters.AddWithValue("@p4", "S")
    cmd.Parameters.AddWithValue("@p5", Label26.Text)

    ' new param to pass the ID from wherever you have it stored
    ' variables work just as good as UI controls, BTW
    cmd.Parameters.AddWithValue("@p6", Label??????.Text)

    cmd.ExecuteNonQuery()
End Using

请注意" S"不需要param。 SQL可以很容易地"[G/L (%)]=?, BS='S'..."

应转换任何不是text / string / char的db列。例如,如果[Sell Price]是十进制:

    cmd.Parameters.AddWithValue("@p1", Convert.ToDecimal(Label7.Text))

我还将参数指定简化为泛型" @ pN",因为OleDB不使用命名参数:它们按照它们在SQL中出现的顺序填充。如果不按相同顺序放置它们,则将它们视为命名参数会导致错误。