0
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()

有人可以帮我弄清楚我做错了什么。我没有错误。表中未进行任何更改。

为什么 ?!!!

4

1 回答 1

1

AcceptChanges仅更新 DataSet 中的行(在内存中)。它将状态更改为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 已经提到的那样提供UpdateCommand 。DataAdapter但这将是下一个问题,因为您通常会在丢失时遇到异常

您可以使用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")
于 2012-05-22T20:06:30.903 回答