• Lunes 23 de Diciembre de 2024, 02:44

Autor Tema:  Dataadapter.update(dataset, Tabla)  (Leído 2921 veces)

kennethsleiker

  • Miembro activo
  • **
  • Mensajes: 25
  • Nacionalidad: do
    • Ver Perfil
    • http://cybersotano.netii.net
Dataadapter.update(dataset, Tabla)
« en: Lunes 15 de Mayo de 2006, 01:46 »
0
Estoy estudiando este sistema!!
En un formulario tengo todo lo necesario para enviar un DataSet a la base de datos SQL.  pero no se graban los registros  ni me da ningun error.  

Todo esta bien setiado, el InsertCommand, la coneccion, etc. No entiendo, lo he comparado con miles de ejmplo y nada me llega a la base de datos cuando la examino.

Sera que hay que hacer algo extra para que el DataAdapter.Update funcione?

Gracias

jodijo5

  • Miembro HIPER activo
  • ****
  • Mensajes: 518
  • Nacionalidad: pe
    • Ver Perfil
    • http://www.bluetecnologia.com
Re: Dataadapter.update(dataset, Tabla)
« Respuesta #1 en: Lunes 15 de Mayo de 2006, 17:25 »
0
seria bueno que muestres tu codigo, pero te puedo decir que para que funcione el dataadapter.update, tienes que tener un commanbuilder, por ejemplo de esta forma:

Código: Text
  1.  
  2. Public Class basedato
  3.     Private cn As SqlConnection
  4.  
  5.     Public Sub New(ByVal sqlconn As String)
  6.         cn = New SqlConnection(sqlconn)
  7.     End Sub
  8.     Public Function conecta(ByVal sql As String, ByVal tabla As String, ByRef ds As DataSet) As SqlDataAdapter
  9.         If (ds Is Nothing) Then
  10.             ds = New DataSet("dataset")
  11.         End If
  12.         Dim da As New SqlDataAdapter
  13.         'esta estructura la pongo porque, cuando intentas hacer una instruccion sql y llenarla a una tabla
  14.         'existente, si coinciden los campos entonces los registros nuevos se agregan a la tabla creada
  15.         'en el dataset
  16.         Try
  17.             ds.Tables.RemoveAt(tabla)
  18.         Catch ex As Exception
  19.  
  20.         End Try
  21.         Try
  22.             'uso el sqlcommand porque eso te asegura la instruccion select, update, insert into, drop, etc
  23.             'con eso ya no tienes que decirle que tipo de instruccion es, simplemente le implementas
  24.             Dim cm As New SqlCommand(sql, cn)
  25.             da = New SqlDataAdapter(cm)
  26.             ' el command builder se pone despues de haber hecho la instruccion sql en el dataadapter
  27.             Dim cmb As New SqlCommandBuilder(da)
  28.             da.Fill(ds, tabla)
  29.         Catch ex As Exception
  30.             MsgBox("la instruccion sql, ah generado un error, el error devuelto fue: " & vbCrLf & ex.Message, MsgBoxStyle.Critical, "Error SQL")
  31.         End Try
  32.         Return da
  33.     End Function
  34. End Class
  35.  
  36.  
=============================
Daniel Pomalaza Mendoza
visita el Dinosaurio Azul :-D
http://bluetecnologia.com

jodijo5

  • Miembro HIPER activo
  • ****
  • Mensajes: 518
  • Nacionalidad: pe
    • Ver Perfil
    • http://www.bluetecnologia.com
Re: Dataadapter.update(dataset, Tabla)
« Respuesta #2 en: Lunes 15 de Mayo de 2006, 17:28 »
0
otro error puede ser que no estas cumpliendo con los requerimientos de la tabla como
la columna esta mal escrita, no respetas la longitud maxima, no respetas el tipo de dato, o quizas no respetas la relacion, debes insertar los datos en varias tablas en el orden que te dice la relacion del modelo E/R, o quizas en tu instrucion que llenaste al dataadapter, tienes un where, o un group, etc, algo que pueda filtrar los registros de la tabla
=============================
Daniel Pomalaza Mendoza
visita el Dinosaurio Azul :-D
http://bluetecnologia.com

kennethsleiker

  • Miembro activo
  • **
  • Mensajes: 25
  • Nacionalidad: do
    • Ver Perfil
    • http://cybersotano.netii.net
Re: Dataadapter.update(dataset, Tabla)
« Respuesta #3 en: Lunes 15 de Mayo de 2006, 23:31 »
0
Muchisimas gracias Hermano por tu ejemplo, lo tomaré en cuenta porque acabo de ver que tu codigo tiene cosas nuevas que puedo implementar en el mio, como el CommandBuilder.

Misteriosamente Hermano, hoy me puse a escribir nuevo codigo con un ejemplo sencillo de una table de 3 campos y misteriosamente todo me trabajo a la perfeccion.  Pero sinceramente que el codigo es similar a los anteriores, aunque me falta hacer la comparcion.

GRACIAS SEñor :-)

Este es el codigo ejemplo:

Código: Text
  1.  
  2. Imports System.Data.SqlClient
  3.  
  4. Public Class Form1
  5.  
  6.     Public AgendaDtSet As New DataSet
  7.     Public MiConeccion As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\106076\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\Database1.mdf;Integrated Security=True;User Instance=True")
  8.     Public MiDataAdapter As New SqlDataAdapter("select * from agenda", MiConeccion)
  9.  
  10.  
  11.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  12.  
  13.         MiDataAdapter.Fill(AgendaDtSet, "agenda")
  14.         DataGridView1.DataSource = AgendaDtSet.Tables("agenda")
  15.  
  16.     End Sub
  17.  
  18.     Private Sub Salvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Salvar.Click
  19.         Dim MiComando As New SqlCommand
  20.  
  21.         Dim tmpDtSet As DataSet
  22.         Dim MiDataRow As DataRow
  23.  
  24.         MiDataRow = AgendaDtSet.Tables("agenda").NewRow
  25.         MiDataRow("codigo") = codigo.Text
  26.         MiDataRow("nombre") = nombre.Text
  27.         MiDataRow("telefono") = telefono.Text
  28.  
  29.         AgendaDtSet.Tables("agenda").Rows.Add(MiDataRow)
  30.  
  31.         tmpDtSet = AgendaDtSet.GetChanges()
  32.         DataGridView2.DataSource = tmpDtSet.Tables("agenda")
  33.  
  34.         MiComando.Connection = MiConeccion
  35.         MiComando.CommandText = "insert into agenda (codigo, nombre, telefono) values (@codigo, @nombre, @telefono)"
  36.         MiComando.Parameters.Add("@codigo", SqlDbType.Char, 10, "codigo")
  37.         MiComando.Parameters.Add("@nombre", SqlDbType.NVarChar, 20, "nombre")
  38.         MiComando.Parameters.Add("@telefono", SqlDbType.NChar, 13, "telefono")
  39.  
  40.         MiDataAdapter.InsertCommand = MiComando
  41.         MiConeccion.Open()
  42.         MiDataAdapter.Update(tmpDtSet, "agenda")
  43.         MiConeccion.Close()
  44.         AgendaDtSet.AcceptChanges()
  45.     End Sub
  46. End Class
  47.  
  48.  

jodijo5

  • Miembro HIPER activo
  • ****
  • Mensajes: 518
  • Nacionalidad: pe
    • Ver Perfil
    • http://www.bluetecnologia.com
Re: Dataadapter.update(dataset, Tabla)
« Respuesta #4 en: Martes 16 de Mayo de 2006, 19:09 »
0
no hay de que copachay, eh revisado tu codigo y como dige, te faltaba el commandbuilder, sin eso no puedes actualizar tus datos en la base de datos,
ademas, yo tambien aprendi algo de ti:
Código: Text
  1.  
  2. Public MiConeccion As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\106076\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\Database1.mdf;Integrated Security=True;User Instance=True")
  3.  
esta cadena nunca la habia visto, graias por tu aporte
=============================
Daniel Pomalaza Mendoza
visita el Dinosaurio Azul :-D
http://bluetecnologia.com