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

AcceptChangesDataSet (メモリ内) の行のみを更新します。状態を に変更し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ます。

それとは別に、クリストファーがすでに述べたように、 UpdateCommandを提供していません。DataAdapterしかし、それが見つからない場合、通常は例外が発生するため、それが次の問題になります。

DataSet.GetChanges変更されたすべての行を取得するために使用できます。これは何も返さないと思います。

編集UpdateCommand:OK、これは(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 に答える