使用DataSet的MySQL.NET

使用DataSet的MySQL.NET,.net,mysql,dataset,.net,Mysql,Dataset,有人能帮我找出我做错了什么吗。我没有错。表中未做任何更改 为什么 AcceptChanges仅更新数据集中(内存中)的行。它将状态更改为未更改。如果要将行更新到数据库,请调用TableAdapter的update方法。此方法将隐式调用AcceptChanges Dim update_status = False Dim tableName = "SF6SETUP" Dim conn As MySqlConnection = New MySqlConnection(cs) Dim da As

有人能帮我找出我做错了什么吗。我没有错。表中未做任何更改


为什么

AcceptChanges
仅更新数据集中(内存中)的行。它将状态更改为
未更改
。如果要将行更新到数据库,请调用
TableAdapter的
update
方法。此方法将隐式调用
AcceptChanges

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()
请注意,使用
DataAdapter
时,无需打开/关闭连接。它将以
Fill
方法打开/关闭

除此之外,您还没有像Christopher已经提到的那样为
DataAdapter
提供。但这将是下一个问题,因为你通常会

可以使用获取所有更改的行。我假设这不会返回任何结果

Edit:好的,下面的示例演示如何提供
UpdateCommand
(假设您有一个ID列)


您还需要设置UpdateCommand吗?你好,蒂姆。我删除了ds.AcceptChanges(),只留下了da.Update(ds),但仍然没有发生任何事情。没有对表进行任何更改,也没有再次出现错误。@mike:ds.GetChanges在更新之前返回什么,什么都没有?除此之外,还应该为DataAdapter提供UpdateCommand。我在回答中漏掉了那一点。但这将是下一个问题,因为我假设没有任何更改,否则您将得到一个缺少UpdateCommand的异常。看起来它是空的。我试图做的是让DataSet对其进行更改,然后使用该DataSet更新MySQL。其他信息:更新在传递带有修改行的DataRow集合时需要有效的UpdateCommand。conn.Open()'尽可能晚地打开连接以获取数据。da.SelectCommand=New MySqlCommand(“从SF6SETUP中选择*”,conn)da.Fill(ds)“ds”行(0)。项(“标题”)=“73333337”对某些行进行更改,然后更新它。ds.Tables(0).Rows(0).Item(0)=“73333337”Try da.Update(ds)Catch ex As MySqlException MessageBox.Show(e.ToString())End Try conn.Close()
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 '
  ' 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")