none
Insert doble despues de actualizar a Visual Studio Update 5 RRS feed

  • Pregunta

  • Hola buen dia a todos, estoy batallando con una parte de mi sistema, estaba funcinando bien hasta que instale el Visual Studio Update 5, tengo un sistema de Help Desk en el cual al crear un nuevo ticket este se inserta dos veces en la base de datos, esto paso despues de actualizar, ya desinstale la actualizacion pero sigue pasando. Y no encuentro en codigo cual es el error

    Este es el boton donde creo el ticket que ejecuta un STORE con parametros

    Protected Sub crearticket(sender As Object, e As EventArgs) Handles btnaceptar.Click
    
            Dim constr As String = ConfigurationManager.ConnectionStrings("bd_sistemaConnectionString").ConnectionString
            Using con As New SqlConnection(constr)
                Using cmd As New SqlCommand("sp_nuevoticket")
                    Using sda As New SqlDataAdapter()
                        cmd.CommandType = CommandType.StoredProcedure
                        cmd.Parameters.AddWithValue("@usuario", txtusuario.Text.Trim())
                        cmd.Parameters.AddWithValue("@area", txtarea.Text.Trim())
                        cmd.Parameters.AddWithValue("@problema", txtproblema.Text.Trim())
                        cmd.Parameters.AddWithValue("@tipopro", ddltipoproblema.SelectedValue)
                        cmd.Connection = con
                        con.Open()
                        cmd.ExecuteNonQuery()
                        con.Close()
                    End Using
                End Using
                Dim mensaje As String = String.Empty
                mensaje = "Se registro el nuevo ticket con exito"
                ClientScript.RegisterStartupScript([GetType](), "alert", (Convert.ToString("alert('") & mensaje) + "');", True)
            End Using
        End Sub

    Este es mi store procedure que recibe la informacion y hace un insert, funcionaba hasta antes de la actualizacion

    CREATE PROCEDURE [sp_nuevoticket]
          @usuario NVARCHAR(20),
          @area NVARCHAR(20),
          @problema NVARCHAR(100),
    	  @tipopro NVARCHAR(20)
    AS
    BEGIN
          SET NOCOUNT ON;
          BEGIN 
                INSERT INTO [tbl_ticket]
                         ([nomusuario]
                         ,[area]
                         ,[descproblema]
                         ,[tipoproblema]
    					 ,[fechaalta]
    					 ,[estado])
                VALUES
                         (@usuario
                         ,@area
                         ,@problema
    					 ,@tipopro
                         ,GETDATE()
    					 ,('ABIERTO'))               
         END
    END
    
    


    martes, 30 de enero de 2018 16:04

Respuestas

  • Hola greg! Si ese era el error!!

    Muchas despues de desintalas todo y volver a instalar me di cuenta de que a mi SUB se le agrego un evento clic entocnes supongo que lanzaba el evento del boton y despues el evento clic por lo que hacia el insert dos veces

    Ya quitando ese evento solo con el boton invoco el OnClic

    Solo borre el evento clic de mi private sub y funciono de nuevo

    martes, 30 de enero de 2018 21:35
  • hola eduar creo que tienes un metodo con un handler al boton click

    Protected Sub crearticket(sender As Object, e As EventArgs) Handles btnaceptar.Click

    Deberia ser ...

    Private Sub BtnAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAceptar.Click
    sin el metodo crearticket???

    martes, 30 de enero de 2018 19:21

Todas las respuestas

  • No hay nada en el update de Visual Studio que pueda tener ese efecto. Tiene que ser alguna otra cosa que se ha cambiado inadvertidamente poco antes o poco despues de aplicar el update.

    Si tienes algun sistema de control de codigo fuente, tal como TFS o git, pidele el historico de cambios y compara a ver que es lo que ha cambiado (y ojo, podria ser algo que no sea evidente en el fuente, por ejemplo, un trigger en SQL Server).

    Y si no, aplica las tecnicas habituales de depuracion: pon puntos de ruptura en el codigo, sigue la ejecucion paso a paso, verifica que solo entra la ejecucion en las partes en las que tiene que entrar, y en cada punto examina la base de datos a ver en que momento ocurre la grabacion superflua.

    Y, por cierto, hablando de cosas superfluas: en el codigo que has mostrado tienes un "using" de un SqlDataAdapter que no se usa para nada.

    martes, 30 de enero de 2018 17:06
  • Hola

    Es raro lo que mencionas, ah no ser que estén presionando dos veces el botón de creación y estés experimentando una leve lentitud en el sistema, además de eso en tu bd no esté validado los ids únicos. ¿Has probado deshabilitar el botón después que lo presiona?. Por otro lado, te recomendaría hacer un paso a paso en debug para poder identificar el error que viene sufriendo el sistema.

    También tu adapter no tiene utilidad en el código, podrías dejarlo solo así y sería suficiente:

    Protected Sub crearticket(sender As Object, e As EventArgs) Handles btnaceptar.Click
    
            Dim constr As String = ConfigurationManager.ConnectionStrings("bd_sistemaConnectionString").ConnectionString
            Using con As New SqlConnection(constr)
                Using cmd As New SqlCommand("sp_nuevoticket")
                        cmd.CommandType = CommandType.StoredProcedure
                        cmd.Parameters.AddWithValue("@usuario", txtusuario.Text.Trim())
                        cmd.Parameters.AddWithValue("@area", txtarea.Text.Trim())
                        cmd.Parameters.AddWithValue("@problema", txtproblema.Text.Trim())
                        cmd.Parameters.AddWithValue("@tipopro", ddltipoproblema.SelectedValue)
                        cmd.Connection = con
                        con.Open()
                        cmd.ExecuteNonQuery()
                        'con.Close() esto tampoco es necesario, lo hace using 
                 End Using
             End Using
                Dim mensaje As String = String.Empty
                mensaje = "Se registro el nuevo ticket con exito"
                ClientScript.RegisterStartupScript([GetType](), "alert", (Convert.ToString("alert('") & mensaje) + "');", True)
        End Sub

    Saludos


    Brayan De la Cruz
    Lima - Perú


    martes, 30 de enero de 2018 17:22
  • hola eduar creo que tienes un metodo con un handler al boton click

    Protected Sub crearticket(sender As Object, e As EventArgs) Handles btnaceptar.Click

    Deberia ser ...

    Private Sub BtnAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAceptar.Click
    sin el metodo crearticket???

    martes, 30 de enero de 2018 19:21
  • Muchas Gracias alberto ya encontre el error, despues de desintalas todo y volver a instalar me di cuenta de que a mi SUB se le agrego un evento clic entocnes supongo que lanzaba el evento del boton y despues el evento clic por lo que hacia el insert dos veces

    Ya quitando ese evento solo con el boton invoco el OnClic

    Y gracias por la observacion del DataAdapter si en efecto no lo utilizaba para nada

    martes, 30 de enero de 2018 21:34
  • Hola greg! Si ese era el error!!

    Muchas despues de desintalas todo y volver a instalar me di cuenta de que a mi SUB se le agrego un evento clic entocnes supongo que lanzaba el evento del boton y despues el evento clic por lo que hacia el insert dos veces

    Ya quitando ese evento solo con el boton invoco el OnClic

    Solo borre el evento clic de mi private sub y funciono de nuevo

    martes, 30 de enero de 2018 21:35