none
ayuda con codigo para guardar RRS feed

  • Pregunta

  • Hola a todos, espero que me puedan ayudar, necesito de su ayuda urgentemente.

    Estoy desarrollando un sistema para mi proyecto final, tengo menos de un mes para terminarlo y no he podido, es una falla que se ve algo simple pero no he podido solucionarla.

    Lo que pasa es, que tengo que guardar datos en mi base creada en SQL (2005) y estoy desarrollando en vb.net (2008)sin utilizar clases ni store procedure, el error que me marca es que si antes de cerrar la conexión escribo el ExecuteNonQuery o ExecuteScalar  me marca error de que tengo que declarar un parametro o que no coinciden con los de la base de datos, y si le quito cualquiera de los dos Execute se ejecuta muy bien el sistema y me aparece el msgbox de que el dato fue guardado, pero al verificar en la base de datos no se almacena, estoy un poco estresada por eso, espero que me puedan ayudar.

    Aquí les dejo el código que utilizo para que le den una checadita plis!!

    Private Sub btnaltas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnaltas.Click

            Dim Cnx As New SqlConnection("Data Source=10.40.129.9;Initial Catalog=WRAMaterialData;User ID=Paola;Password=Paola1")
            Dim SQLmateriales = "INSERT INTO TablaPrueba VALUES (@Parte,@Descripcion,@Proveedor,@ProveedorNombre,@Import,@Ruta,@ContsPerFtl)"
            Dim Cmdmateriales As New SqlCommand(SQLmateriales, Cnx)
            Cmdmateriales.CommandType = CommandType.Text


            Cnx.Open()
            'Cmdmateriales.ExecuteScalar()
            'Cmdproveedores.ExecuteNonQuery()

            Cmdmateriales.Parameters.Add(New SqlParameter("@Parte", Me.txtparte.Text))
            Cmdmateriales.Parameters.Add(New SqlParameter("@Descripcion", Me.txtdesc.Text))
            Cmdmateriales.Parameters.Add(New SqlParameter("@Proveedor", Me.txtprov.Text))
            Cmdmateriales.Parameters.Add(New SqlParameter("@ProveedorNombre", Me.txtnprov.Text))
            Cmdmateriales.Parameters.Add(New SqlParameter("@Import", Me.txtimport.Text))
            Cmdmateriales.Parameters.Add(New SqlParameter("@Ruta", Me.txtruta.Text))
            Cmdmateriales.Parameters.Add(New SqlParameter("@ContsPerFtl", Me.txtcont.Text))


            Cnx.Close()

            MsgBox("El Material Fue Registrado", MsgBoxStyle.Information, "Sistema")

            Me.txtparte.Clear()
            Me.txtdesc.Clear()
            Me.txtprov.Clear()
            Me.txtnprov.Clear()
            Me.txtimport.Clear()
            Me.txtruta.Clear()
            Me.txtcont.Clear()


            Me.txtparte.Focus()

     

        End Sub

    Gracias de antemano

    miércoles, 15 de julio de 2009 12:58

Respuestas

  • hola,

    La solucion es simple debes mover de lugar el ExecuteNonQuery de lugar.


    Private Sub btnaltas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnaltas.Click

            Dim Cnx As New SqlConnection("Data Source=10.40.129.9;Initial Catalog=WRAMaterialData;User ID=Paola;Password=Paola1")
            Dim SQLmateriales = "INSERT INTO TablaPrueba VALUES (@Parte,@Descripcion,@Proveedor,@ProveedorNombre,@Import,@Ruta,@ContsPerFtl)"
           
            Dim Cmdmateriales As New SqlCommand(SQLmateriales, Cnx)
            Cmdmateriales.CommandType = CommandType.Text


            Cmdmateriales.Parameters.Add(New SqlParameter("@Parte", Me.txtparte.Text))
            Cmdmateriales.Parameters.Add(New SqlParameter("@Descripcion", Me.txtdesc.Text))
            Cmdmateriales.Parameters.Add(New SqlParameter("@Proveedor", Me.txtprov.Text))
            Cmdmateriales.Parameters.Add(New SqlParameter("@ProveedorNombre", Me.txtnprov.Text))
            Cmdmateriales.Parameters.Add(New SqlParameter("@Import", Me.txtimport.Text))
            Cmdmateriales.Parameters.Add(New SqlParameter("@Ruta", Me.txtruta.Text))
            Cmdmateriales.Parameters.Add(New SqlParameter("@ContsPerFtl", Me.txtcont.Text))

            Cnx.Open()
         
            Cmdproveedores.ExecuteNonQuery()
           
            Cnx.Close()

            MsgBox("El Material Fue Registrado", MsgBoxStyle.Information, "Sistema")

            Me.txtparte.Clear()
            Me.txtdesc.Clear()
            Me.txtprov.Clear()
            Me.txtnprov.Clear()
            Me.txtimport.Clear()
            Me.txtruta.Clear()
            Me.txtcont.Clear()


            Me.txtparte.Focus()

     

        End Sub


    como veras primero se cargan lo parametros y luego se ejecuta el query.


    Nota: creo igualmente que no hace falta hacer el Open de la conexion el ExecuteNonQuery solo la abre y la cierra cuando ejecuta, podrias probarlo.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 15 de julio de 2009 13:10

Todas las respuestas

  • hola,

    La solucion es simple debes mover de lugar el ExecuteNonQuery de lugar.


    Private Sub btnaltas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnaltas.Click

            Dim Cnx As New SqlConnection("Data Source=10.40.129.9;Initial Catalog=WRAMaterialData;User ID=Paola;Password=Paola1")
            Dim SQLmateriales = "INSERT INTO TablaPrueba VALUES (@Parte,@Descripcion,@Proveedor,@ProveedorNombre,@Import,@Ruta,@ContsPerFtl)"
           
            Dim Cmdmateriales As New SqlCommand(SQLmateriales, Cnx)
            Cmdmateriales.CommandType = CommandType.Text


            Cmdmateriales.Parameters.Add(New SqlParameter("@Parte", Me.txtparte.Text))
            Cmdmateriales.Parameters.Add(New SqlParameter("@Descripcion", Me.txtdesc.Text))
            Cmdmateriales.Parameters.Add(New SqlParameter("@Proveedor", Me.txtprov.Text))
            Cmdmateriales.Parameters.Add(New SqlParameter("@ProveedorNombre", Me.txtnprov.Text))
            Cmdmateriales.Parameters.Add(New SqlParameter("@Import", Me.txtimport.Text))
            Cmdmateriales.Parameters.Add(New SqlParameter("@Ruta", Me.txtruta.Text))
            Cmdmateriales.Parameters.Add(New SqlParameter("@ContsPerFtl", Me.txtcont.Text))

            Cnx.Open()
         
            Cmdproveedores.ExecuteNonQuery()
           
            Cnx.Close()

            MsgBox("El Material Fue Registrado", MsgBoxStyle.Information, "Sistema")

            Me.txtparte.Clear()
            Me.txtdesc.Clear()
            Me.txtprov.Clear()
            Me.txtnprov.Clear()
            Me.txtimport.Clear()
            Me.txtruta.Clear()
            Me.txtcont.Clear()


            Me.txtparte.Focus()

     

        End Sub


    como veras primero se cargan lo parametros y luego se ejecuta el query.


    Nota: creo igualmente que no hace falta hacer el Open de la conexion el ExecuteNonQuery solo la abre y la cierra cuando ejecuta, podrias probarlo.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 15 de julio de 2009 13:10
  • Ay gracias por responderme, pues antes de tenerlo en el lugar que esta ahora lo tenía entre las conexiones y me pasa lo mismo, bueno dejame lo intento otra vez así y te digo a ver que pasa.

    Gracias!!
    miércoles, 15 de julio de 2009 13:21
  • hola,

    Otro tema que puede estar pasando es que no indicas las columnas o el orden en el insert.

    recuerda que la clausula INSERT al principio requiere los campos que se insertan.

    INSERT INTO TablaPrueba (Parte, escripcion, Proveedor, ProveedorNombre, Importe, Ruta, ContsPerFTL)
    VALUES (@Parte,@Descripcion,@Proveedor,@ProveedorNombre,@Import,@Ruta,@ContsPerFtl)


    Nota, se que esto no es obligario, pero sino lo pones debes armar la parte de values con exacto el mismo orden que tiene tu tabla en al db, y deben estar todas las columnas.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 15 de julio de 2009 13:26
  • jaja

    oye pues no se si esto tenga que ver, mira esos datos que te mostre en la pregunta sólo son algunos, o sea la bd cuenta con más columnas, pero en la forma llamada altas sólome piden que agregue esos campos, ya que habrá otra persona que por medio de otra form guardará los datos que faltan, eso tendrá que ver??
    miércoles, 15 de julio de 2009 13:30
  • mira esto me dice: Insert Error: Column name or number of supplied values does not match table definition
    miércoles, 15 de julio de 2009 13:33
  • hola,

    entonces es como te comentaba deberias definir las columnas que tiene tu tabla en el insert

    de esta forma:

    INSERT INTO TablaPrueba (Parte, escripcion, Proveedor, ProveedorNombre, Importe, Ruta, ContsPerFTL)
    VALUES (@Parte,@Descripcion,@Proveedor,@ProveedorNombre,@Import,@Ruta,@ContsPerFtl)

    ya que en tu tabla estas teniendo mas columnas que las enviadas en el value.

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 15 de julio de 2009 16:33