hola amigos utilizo este codigo para hacer el ingreso de un usarario por medio de un formulario hacia una tabla del nombre usuarios tambie y al momento de ejecutar me sale un erro deicnedo que la aplicacion no a sido cerrada que sigue abierto y nose donde esta el error
estoy utilizando un procedimiento almacenado para autogenerar cu codigo o IDUSUARIO pero no me muestra, y no puedo actualizar en el momento el datagridview


Ayudenme amejorar este codigo para utilizarla en otras tablas mas que tiene la similitud de este codigo


Imports System.Data.SqlClient
Public Class frmusuarios
Dim cn As New SqlConnection("data source=.; integrated security = sspi; initial catalog=ventas")
Dim edita As Boolean


Private Sub btnsalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Close()
End Sub


Private Sub btncancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncancelar.Click
If btncancelar.Text = "&Editar" Then
Me.btnNuevo.Text = "&Guardar"
Me.btncancelar.Text = "&cancelar"
Me.dgusuarios.Visible = False


Else
Me.btnNuevo.Text = "&Nuevo"
Me.btncancelar.Text = "&Editar"
Me.dgusuarios.Visible = True
End If


End Sub


Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click
If btnNuevo.Text = "Nuevo" Then
Me.btnNuevo.Text = "&Guardar"
Me.btncancelar.Text = "&cancelar"
Me.dgusuarios.Visible = False
edita = False
Me.txtcodigo.Text = "Generando..."
' Me.txtcodigo.Clear()
Me.txtusuario.Clear()
Me.txtdireccion.Clear()
Me.txttelefono.Clear()
Me.txtemail.Clear()
'&nbsp ; Me.txtcodigo.Focus()
Else
Me.btnNuevo.Text = "Nuevo"
Me.dgusuarios.Visible = True
If edita = True Then
stored("logEditarTipo", False)
Else
stored("sp_usuario", False)
End If
End If
end sub


Sub stored(ByVal proced As String, ByVal elim As Boolean)
Dim xid As Integer
cn.Open()
Dim er As Boolean
Dim cmd As New SqlCommand
Try
cmd.Connection = cn
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = proced
If elim = False Then
'' si esta editando
If edita = True Then
cmd.Parameters.Add("@xIdusuario", SqlDbType.NVarChar, 5)
cmd.Parameters("@xIdusuario").Value = Me.txtcodigo.Text
End If
cmd.Parameters.Add("@xnombre", SqlDbType.NVarChar, 50)
cmd.Parameters("@xnombre").Value = Me.txtusuario.Text


cmd.Parameters.Add("@xfnac", SqlDbType.NVarChar, 8)
cmd.Parameters("@xfnac").Value = Me.txtfnac.Text


cmd.Parameters.Add("@xdni", SqlDbType.NVarChar, 10)
cmd.Parameters("@xdni").Value = Me.txtdni.Text


cmd.Parameters.Add("@xdireccion", SqlDbType.NVarChar, 50)
cmd.Parameters("@xdireccion").Value = Me.txtdireccion.Text


cmd.Parameters.Add("@xtelefono", SqlDbType.NVarChar, 10)
cmd.Parameters("@xtelefono").Value = Me.txttelefono.Text


cmd.Parameters.Add("@xemail", SqlDbType.NVarChar, 50)
cmd.Parameters("@xemail").Value = Me.txtemail.Text
Else
cmd.Parameters.Add("@xIdusuario", SqlDbType.NVarChar, 14)
cmd.Parameters("@xIdusuario").Value = xid
End If
cmd.ExecuteNonQuery()
Catch ex As Exception
er = True
MsgBox("Ha ocurrido un error: " & ex.Message)
Finally
If er = True Then
Else
MsgBox("El Proceso fue satisfactorio")
End If
End Try
cn.Close()
End Sub

Private Sub frmusuarios_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
actualizarg()
End Sub
Sub actualizarg()
cn.Open()
Dim cmd As New SqlCommand("select * from vusuarios", cn)
Dim da As New SqlDataAdapter
Dim ds As New DataSet
da.SelectCommand = cmd
da.Fill(ds, "vusuarios")
Me.dgusuarios.DataSource = ds.Tables("vusuarios")
cn.Close()
End Sub





storeprocedure


CREATE PROCEDURE sp_usuario
@xnombre varchar(50),
@xfnac varchar(8),
@xdni char (8),
@xdireccion varchar(50),
@xtelefono char(10),
@xemail varchar(50)
AS
Begin
declare @xIdusuario varchar(5), @x int, @a int
set @a=(Select nAncho from logcorrelativo where cTabla='vusuarios' and cCampo='idusuario' and ctipo='1')
set @x = (Select nCorrelativo from logcorrelativo where cTabla='vusuarios' and cCampo='idusuarior' and ctipo='1')
update logcorrelativo set nCorrelativo = (@x+1) where cTabla='vusuarios' and cCampo='idusuario' and ctipo='1'
set @xIdusuario=right('00000000000000'+ltrim(str(@x)), @a)
insert into vusuarios(idusuario,nombreusuario,fnac,dni,direcci on,telefon o,email) values (@xIdusuario, @xnombre,@xfnac,@xdni,@xdireccion,@xtelefono,@xema il)
End
GO