我有一个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()
答案 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中出现的顺序填充。如果不按相同顺序放置它们,则将它们视为命名参数会导致错误。