none
Procedimiento almacenado en VB 2008 RRS feed

  • Pregunta

  • Buenos Días por favor suplico se me ayude; estoy realizando un sistema en vb2008 donde cree un base de datos dentro de vb2008  lalmada Contro Cabinas
    el detalle es que he creado procedimientos almacenados donde me genera codigo para cada tabla y quisiera usarla  he usado los códigos siguientes y solo agrega en la base de datos temporal y no en la base de datos original porque cuando cierro el formulario y vuelvo abrir los datos que supuestamente almacenaron ya no se encuentran.

    PROCEDIMIENTO ALMACENADO
    ALTER PROCEDURE [dbo].[usp_InsertarEmpleados]

                    @Usu_Nombre                                   nvarchar(50),

                    @Usu_FechaInsercion       datetime

                                                  

    as

                    declare @Codigo char(10)

                    declare @dia char(2)

                    declare @mes char(2)

                    declare @ains char(4)

                    declare @nro char(2)

     

    if (@Usu_FechaInsercion >(select max(Usu_FechaInsercion)From tbl_Usuario))

                    Begin

                                                   set @Nro = '00'

                    End

    Else

                    Begin

                                   set @nro=(select max(right(Usu_Codigo,2)) from tbl_Usuario where Usu_FechaInsercion=@Usu_FechaInsercion)--saca valor mas alto con 3 digitos

                                   set @nro=@nro+1 --aumenta correlativo

                                   if len (@nro)=1 set @nro='0' + @nro

                    End                        

     

    set @dia = day(@Usu_FechaInsercion)

    if len(@dia)=1  set @dia= '0'+@dia

    set @mes = month(@Usu_FechaInsercion)

    if len(@mes)=1  set @mes= '0'+@mes

    set @ains = year(@Usu_FechaInsercion)

                   

    set          @Codigo = @dia+@mes+@ains+@nro

                    --print @codigo +'  primeo'

    INSERT INTO tbl_Usuario(Usu_Codigo, Usu_Nombre, Usu_FechaInsercion)

    VALUES(@Codigo, @Usu_Nombre, @Usu_FechaInsercion)

                   

    EL CODIGO QUE SE GENERA ES DE 2602201001 ES DECIR DIA(26)MES(02)AÑO(2010)-CORRELATIVO(01) 

     

     VISUAL BASIC 2008 USO ESTE CODIGO

     

    Dim DTABLE As DataTable

        Dim Cmd As SqlCommand

        Dim DA As New SqlDataAdapter

        Dim DT As New DataTable

        'Dim CnStrin As New SqlConnection(My.Settings.Control_CabinasConnectionString())

       

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            Try

     

                CnStrin.Open()

                ' MsgBox("Conectado")

     

                Cmd = New SqlCommand("usp_InsertarEmpleados", CnStrin)

                Cmd.CommandType = CommandType.StoredProcedure

     

                Cmd.Parameters.AddWithValue("@Usu_Nombre", SqlDbType.NVarChar)

                Cmd.Parameters("@Usu_Nombre").Value = Usu_NombreTextBox.Text

     

                Cmd.Parameters.AddWithValue("@Usu_FechaInsercion", SqlDbType.DateTime)

                Cmd.Parameters("@Usu_FechaInsercion").Value = Usu_FechaInsercionDateTimePicker.Value()

     

                'Dim stRCon As String = My.Settings.Control_CabinasConnectionString()

                'Dim strSql As String = "Select * from tbl_Usuario"

                Cmd.ExecuteNonQuery()

     

                            CnStrin.Close()

            Catch ex As Exception

                CnStrin.Close()

                MsgBox("Naaaaaaaaaa" + ErrorToString())

            End Try

     

        End Sub

     

    y tambien quisiera saber si en la conexión nos pide usuario y contraseña para conectarse,  como se hace si un sitema creado en una pc 01 puedo instalar en una pc 02 habra que modificar el  usario y contraseña MI CORREO ES  j2e_jorge@hotmail.com

     

    • Editado J2amiledE viernes, 26 de febrero de 2010 21:43
    • Cambiado Enrique M. Montejo viernes, 15 de julio de 2011 18:00 acceso a datos (De:Lenguaje VB.NET)
    viernes, 26 de febrero de 2010 17:15

Todas las respuestas

  • hola

    seria bueno si puedes editar el post y pegar el codigo co algo ams de identacion, esta bastante complejo para seguir el codigo
    recuerda no pegar directo del VS, pasa primero por un notepad para quitar el formato


    lo que veo es que el el codigo de vb.net creas los parametros pero no le asignas valor alguno

    o sea haces esto
    Cmd.Parameters.AddWithValue("@Usu_Nombre", SqlDbType.NVarChar)

    pero alli no debes definir el tipo el AddWithValue() toma el tipo automatico dependiendo de la  variable que usas

    Cmd.Parameters.AddWithValue("@Usu_Nombre", valor)



    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 26 de febrero de 2010 17:33
  • Holaleandro un gusto.. disculpa ahora envie el codigo completo sabes estube leyendo y creo que solo se alamacena en el dataset  porque cuando muestro los datos de la tabal no registra nada pero si en al tabla temporal que se crea gracais de todos modos
    viernes, 26 de febrero de 2010 21:47
  • hola

    en principio el codigo parece estar correcto, no veo anda que indique un error

    -algo que podrias probar es empezar por algo simple crea un procedure como este


    ALTER PROCEDURE [dbo].[usp_InsertarEmpleados]
        @Usu_Nombre             nvarchar(50),
        @Usu_FechaInsercion        datetime

    as

    INSERT INTO tbl_Usuario(Usu_Codigo, Usu_Nombre, Usu_FechaInsercion)
    VALUES(20100101, @Usu_Nombre, @Usu_FechaInsercion)





    y prueba que pasa, por supuesto solo agrega un usuario ya que el codigo como veras esta fijo en tu codigo
    si insertas un segundo fallara por clave duplicada

    lo que veo es que la logica para generar el codigo es algo compleja, porque s que no has suado un campo incremental, algo mas simple podrias usar el campo del tipo autonumerico

    cuale s la razon para no hacerlo ?

    si es auditoria, a la tabla podrias agregar campo para guardar la fecha de creacion del registro, es ams facil insertar una fecha que armar el codigo como lo has realizado


    otra cosa que podrias probar es revisa el valor devuelto por ExecuteNonQuery()
    como sabras este devuelve la cantidad de registro afectados

    si haces  

    Dim afectados As Integer = Cmd.ExecuteNonQuery()

    luego evalua la variable y ve si dice al menos uno, si esta en cero no ha insertado el registro


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    viernes, 26 de febrero de 2010 22:09