none
Como ejecutar un store sql con transaccion desde vb.net

    Pregunta

  • hola compañeros disculpen estoy queriendo ejecutar un store dentro de una transaccion en mi codigo desde la aplicacion, sucede que no me reconoce el nombre de mi procedure a la hora d ejecutarlo, y es preciso q lo haga dependiendo si se ejecutó una transaccion previa

    y como pueden observar el nombre del storeprocedure es correcto y ya verifiqué que es la misma conexion que ejecuto comand previamente: 

     Using BDatos As New SqlConnection(CadenaConexion)
                            BDatos.Open()
                            Dim sqlTran As SqlTransaction = BDatos.BeginTransaction
                            Dim CMD As SqlCommand = BDatos.CreateCommand
                            CMD.Transaction = sqlTran
    
    If TextBox1.Text <> "" And TextBox2.Text <> "" And cbo_catalogo.Text <> "" ...... then
    
    
    Dim Nvo_articulo As String
                                        Nvo_articulo = "insert into productos(codigo,producto,precio,precio2,precio3,existencia_cajas,existencia_pzas,remesa,vigencia,a_granel,sugerida_inventario,Cve_Pro,unidad_p2,unidad_p3,costo,iva,ganancia,catalogo,descuento,cost_caja,precCaja,fechmov)" & _
                                        "values(@codigo,@product,@precpub,@precio2,@exi_cajas,@exi_pzas,@remesa,@vigencia,@no_granel,@min_invent,@Cve_Pro,@ud_p2,@ud_p3,@costo,@iva_dinero,@util,@catalog,@descto,@costCja,@precCja,@fechAlta)"
                                        CMD.CommandText = Nvo_articulo
    
                                        'damos parametros                                                                                                                                            
                                        CMD.Parameters.AddWithValue("@codigo", strcodbar)
                                        CMD.Parameters.AddWithValue("@product", LTrim(TextBox1.Text))
                                        CMD.Parameters.AddWithValue("@precpub", Val(TextBox7.Text))
                                        CMD.Parameters.AddWithValue("@exi_cajas", NumericUpDown2.Value) 'Totalcajas
                                        CMD.Parameters.AddWithValue("@exi_pzas", exist) '
                                        CMD.Parameters.AddWithValue("@remesa", vendido)
                                        ................................................
    .........................................
                                      .............
                                        CMD.Parameters.AddWithValue("@precCja", cero1)
                                        CMD.Parameters.AddWithValue("@fechAlta", fechAlta)
    
                                        'instrucciones de ejecucion
                                        CMD.ExecuteNonQuery()     '<----HASTA AQUÍ TODO BIEN
    
     If ChkBoxSincronia.Text = "Error ...  " Then
                                            Dim pend As Boolean = True 
                                            Dim qSuc As String
                                            qSuc = "update EstadoRed set Edo_sucursal=@pendient"
                                            CMD.CommandText = qSuc
                                            CMD.Parameters.AddWithValue("@pendient", pend)
    
                                            CMD.ExecuteNonQuery()
       Dim Backupsql As String
                                            Backupsql = "EXEC DatosbaseTblSincronizar @codigo,@descripcion,@preciopub,@precio2,@precio3,@no_granel,@Cve_Pro,@unidad_p2,@unidad_p3,@costo,@iva_dnro,@util,@catalog,@descto,@costCja,@precCja"
                                            CMD.CommandType = CommandType.StoredProcedure
                                            CMD.CommandText = Backupsql
    
                                            CMD.Parameters.AddWithValue("@codigo", strcodbar)
    
    .........................................
    CMD.ExecuteNonQuery()    '<--- ACA YA NO EJECUTA EL QUERY Y MANDA MENSAGE DE ARRIBA
    end if
    
    
    ya probé usando "EXEC dbo.DatosbaseTblSincronizar" pero tampoco

    La programacion en Microsoft cada ves se torna inalcanzable


    domingo, 11 de septiembre de 2016 0:28

Respuestas

  • Hola alfonso_tecnicopa,

    Estás ejecutando el StoredProcedure mal, ya que este no debe tener la sentencia EXEC y menos los parámetros de corrido.

                Using con As New SqlConnection("MiCadenaConexion")
                    con.Open()
    
                    Dim cmd As New SqlCommand("DatosbaseTblSincronizar", con)
                    cmd.CommandType = CommandType.StoredProcedure
    
                    cmd.Parameters.AddWithValue("@codigo", strcodbar)
                    cmd.Parameters.AddWithValue("@descripcion", descripcion)
                    'demás parámetros.....
    
                    cmd.ExecuteNonQuery()
                End Using

    Como puedes ver, sólo tienes que poner el nombre del StoredProcedure en el SQLCommand, y posteriormente añades los parámetros.

    Además, no veo que uses CMD.Parameters.Clear() para limpiar los parámetros de la consulta anterior.

    Aquí puedes ver un ejemplo de como usar Transacciones desde VB.net.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    domingo, 11 de septiembre de 2016 0:45

Todas las respuestas

  • Hola alfonso_tecnicopa,

    Estás ejecutando el StoredProcedure mal, ya que este no debe tener la sentencia EXEC y menos los parámetros de corrido.

                Using con As New SqlConnection("MiCadenaConexion")
                    con.Open()
    
                    Dim cmd As New SqlCommand("DatosbaseTblSincronizar", con)
                    cmd.CommandType = CommandType.StoredProcedure
    
                    cmd.Parameters.AddWithValue("@codigo", strcodbar)
                    cmd.Parameters.AddWithValue("@descripcion", descripcion)
                    'demás parámetros.....
    
                    cmd.ExecuteNonQuery()
                End Using

    Como puedes ver, sólo tienes que poner el nombre del StoredProcedure en el SQLCommand, y posteriormente añades los parámetros.

    Además, no veo que uses CMD.Parameters.Clear() para limpiar los parámetros de la consulta anterior.

    Aquí puedes ver un ejemplo de como usar Transacciones desde VB.net.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    domingo, 11 de septiembre de 2016 0:45
  • Hola alfonso_tecnicopa,

    Estás ejecutando el StoredProcedure mal, ya que este no debe tener la sentencia EXEC y menos los parámetros de corrido.

                Using con As New SqlConnection("MiCadenaConexion")
                    con.Open()
    
                    Dim cmd As New SqlCommand("DatosbaseTblSincronizar", con)
                    cmd.CommandType = CommandType.StoredProcedure
    
                    cmd.Parameters.AddWithValue("@codigo", strcodbar)
                    cmd.Parameters.AddWithValue("@descripcion", descripcion)
                    'demás parámetros.....
    
                    cmd.ExecuteNonQuery()
                End Using

    Como puedes ver, sólo tienes que poner el nombre del StoredProcedure en el SQLCommand, y posteriormente añades los parámetros.

    Además, no veo que uses CMD.Parameters.Clear() para limpiar los parámetros de la consulta anterior.

    Aquí puedes ver un ejemplo de como usar Transacciones desde VB.net.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    bien amigo pero creo tu ejemplo solo funciona en caso de una sola transaccion, si lo hago como comentas, en efecto ya reconoce el nombre de mi store, pero ahora me arroja mensaje "el procedimiento esperaba el parámetro @cod que no se ha definido"  siendo que ya lo definí de ésta forma: cmd.parameters.AddWithValue("@cod",strbar)

    de qué otra forma declaro los parámetros?


    La programacion en Microsoft cada ves se torna inalcanzable

    viernes, 16 de septiembre de 2016 20:46