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
Ir a la versión completa