CLR: .Net / Mono / Boo / Otros CLR > VB .NET

 Dataadapter.update(dataset, Tabla)

(1/1)

kennethsleiker:
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:
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 --- Public Class basedato    Private cn As SqlConnection     Public Sub New(ByVal sqlconn As String)        cn = New SqlConnection(sqlconn)    End Sub    Public Function conecta(ByVal sql As String, ByVal tabla As String, ByRef ds As DataSet) As SqlDataAdapter        If (ds Is Nothing) Then            ds = New DataSet("dataset")        End If        Dim da As New SqlDataAdapter        'esta estructura la pongo porque, cuando intentas hacer una instruccion sql y llenarla a una tabla        'existente, si coinciden los campos entonces los registros nuevos se agregan a la tabla creada         'en el dataset        Try            ds.Tables.RemoveAt(tabla)        Catch ex As Exception         End Try        Try            'uso el sqlcommand porque eso te asegura la instruccion select, update, insert into, drop, etc            'con eso ya no tienes que decirle que tipo de instruccion es, simplemente le implementas            Dim cm As New SqlCommand(sql, cn)            da = New SqlDataAdapter(cm)            ' el command builder se pone despues de haber hecho la instruccion sql en el dataadapter            Dim cmb As New SqlCommandBuilder(da)            da.Fill(ds, tabla)        Catch ex As Exception            MsgBox("la instruccion sql, ah generado un error, el error devuelto fue: " & vbCrLf & ex.Message, MsgBoxStyle.Critical, "Error SQL")        End Try        Return da    End FunctionEnd Class  

jodijo5:
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

kennethsleiker:
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 --- Imports System.Data.SqlClient Public Class Form1     Public AgendaDtSet As New DataSet    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")    Public MiDataAdapter As New SqlDataAdapter("select * from agenda", MiConeccion)      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load         MiDataAdapter.Fill(AgendaDtSet, "agenda")        DataGridView1.DataSource = AgendaDtSet.Tables("agenda")     End Sub     Private Sub Salvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Salvar.Click        Dim MiComando As New SqlCommand         Dim tmpDtSet As DataSet        Dim MiDataRow As DataRow         MiDataRow = AgendaDtSet.Tables("agenda").NewRow        MiDataRow("codigo") = codigo.Text        MiDataRow("nombre") = nombre.Text        MiDataRow("telefono") = telefono.Text         AgendaDtSet.Tables("agenda").Rows.Add(MiDataRow)         tmpDtSet = AgendaDtSet.GetChanges()        DataGridView2.DataSource = tmpDtSet.Tables("agenda")         MiComando.Connection = MiConeccion        MiComando.CommandText = "insert into agenda (codigo, nombre, telefono) values (@codigo, @nombre, @telefono)"        MiComando.Parameters.Add("@codigo", SqlDbType.Char, 10, "codigo")        MiComando.Parameters.Add("@nombre", SqlDbType.NVarChar, 20, "nombre")        MiComando.Parameters.Add("@telefono", SqlDbType.NChar, 13, "telefono")         MiDataAdapter.InsertCommand = MiComando        MiConeccion.Open()        MiDataAdapter.Update(tmpDtSet, "agenda")        MiConeccion.Close()        AgendaDtSet.AcceptChanges()    End SubEnd Class  

jodijo5:
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 --- 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") esta cadena nunca la habia visto, graias por tu aporte

Navegación

[0] Índice de Mensajes

Ir a la versión completa