Dim update_status = False
Dim tableName = "SF6SETUP"
Dim conn As MySqlConnection = New MySqlConnection(cs)
Dim da As MySqlDataAdapter = New MySqlDataAdapter()
'Dim cmd As MySqlCommand = New MySqlCommand("SELECT * FROM SF6SETUP")
Dim ds As DataSet = New DataSet()
' Open connection as late as possible to get data.
conn.Open()
da.SelectCommand = New MySqlCommand("SELECT * FROM SF6SETUP")
da.SelectCommand.Connection = conn
da.Fill(ds)
' Make a change to some row then update it.
ds.Tables(0).Rows(0).Item("O2AreaCts") = "73333337"
ds.AcceptChanges()
da.Update(ds)
conn.Close()
有人可以帮我弄清楚我在做什么错。我没有错。表中未做任何更改。
为什么?!
最佳答案
AcceptChanges
仅更新数据集中的行(在内存中)。它将状态更改为unchanged
。如果要将行更新到数据库,请调用TableAdapter's
Update
方法。此方法将隐式调用AcceptChanges
。
ds.Tables(0).Rows(0).Item("O2AreaCts") = "73333337"
ds.AcceptChanges() ' this will prevent the update in the next line '
da.Update(ds) ' this would call AcceptChanges implicitely after the database was updated '
请注意,使用
DataAdapter
时无需打开/关闭连接。它将在Fill
方法中打开/关闭。除此之外,您还没有像Christopher所提到的那样为
DataAdapter
提供UpdateCommand。但这将是下一个问题,因为您通常会get an exception when it's missing。您可以使用
DataSet.GetChanges
获取所有更改的行。我认为这没有任何回报。编辑:好的,这是一个示例,显示如何提供
UpdateCommand
(假设您有ID列) ' Create the UpdateCommand.
Dim sql = "UPDATE SF6SETUP SET O2AreaCts=?O2AreaCts WHERE id=?oldId"
da.UpdateCommand = New MySqlCommand(sql, conn)
da.UpdateCommand.Parameters.Add("?O2AreaCts", MySqlDbType.VarChar, 50, "O2AreaCts" )
da.UpdateCommand.Parameters.Add("?oldId", MySqlDbType.VarChar, 50, "id")