MySQL .NET usando DataSet

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

¿Puede alguien por favor ayudarme a averiguar qué estoy haciendo mal? No recibo ningún error. No se han realizado cambios en la tabla.

Por qué ?!!!

preguntado el 22 de mayo de 12 a las 21:05

¿Necesita configurar el UpdateCommand también? dev.mysql.com/doc/refman/5.0/es/… -

1 Respuestas

AcceptChanges solo actualiza las filas en el DataSet (en la memoria). Cambia el estado a unchanged. Si desea actualizar sus filas en la base de datos, llame a su TableAdapter's Update método. Este método llamará AcceptChanges implícitamente.

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 '

Tenga en cuenta que no necesita abrir/cerrar la conexión cuando usa un DataAdapter. Será abierto/cerrado en el Fill método.

Aparte de eso, no ha proporcionado una ActualizarComando para DataAdapter como Christopher ya ha mencionado. Pero ese sería el siguiente problema ya que normalmente lo harías. obtener una excepción cuando falta.

Puede usar el DataSet.GetChanges para obtener todas las filas modificadas. Supongo que esto no devuelve nada.

Editar: Ok, aquí hay un ejemplo para mostrar cómo proporcionar un UpdateCommand (asumiendo que tiene una columna de 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")

contestado el 23 de mayo de 12 a las 18:05

Hola Tim. Eliminé ds.AcceptChanges() y solo dejé da.Update(ds) todavía no sucedió nada. No se han realizado cambios en la tabla ni se han vuelto a producir errores. - micro

@mike: ¿Qué hace ds.GetChanges volver antes de la actualización, nada? Aparte de eso, debe proporcionar un UpdateCommand para el DataAdapter. Me he perdido ese punto en mi respuesta. Pero ese sería el siguiente problema, ya que asumo que no hay cambios, de lo contrario, obtendría una excepción por el UpdateCommand faltante. msdn.microsoft.com/en-us/library/… - Tim Schmelter

Parece que es nulo. Lo que estoy tratando de hacer es hacer que DataSet haga cambios en él y luego usar ese DataSet para actualizar MySQL. - micro

Información adicional: la actualización requiere un UpdateCommand válido cuando se pasa la colección DataRow con filas modificadas. - micro

conn.Open() ' Abrir la conexión lo más tarde posible para obtener datos. da.SelectCommand = New MySqlCommand("SELECT * FROM SF6SETUP", conn) da.Fill(ds) 'ds.Rows(0).Item("Title") = "73333337" ' Realice un cambio en alguna fila y luego actualícelo . ds.Tables(0).Rows(0).Item(0) = "73333337" Try da.Update(ds) Catch ex As MySqlException MessageBox.Show(e.ToString()) End Try conn.Close() - micro

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.