Procediminetos almacenados en SQL SERVER - EJEMPLO insert desde vb.net

no voy a explicar  como crear un procedimiento almacenado en sql server 2008 r2 .
pero les dejo un ejemplo , para crear la tabla , el procedimineto  y para llamarlo desde vb.net

El procedimiento se encargara de hacer un insert , pero ademas nos devolverá un mensaje en caso de que el dato se allá insertado correctamente .

Crear la tabla para el ejemplo :

CREATE TABLE [dbo].[operador](
    [idOperador] [int] IDENTITY(1,1) NOT NULL,
    [fk_idPlanilla] [int] NOT NULL,
    [fk_idRecipiente] [int] NULL,
    [Recipiente] [nvarchar](50) NULL,
    [Volumen] [decimal](8, 1) NULL,
    [Origen] [nvarchar](50) NULL,
    [Tiempo] [nvarchar](50) NULL,
    [VenteoEnCurso] [bit] NULL,
    [AutorizacionPendiente] [bit] NULL,
    [Enclavado] [bit] NULL,
    [Urgente] [bit] NULL,
    [ResponsableID] [int] NULL,
    [Responsable] [nvarchar](100) NULL,
    [TomaMuestra] [nvarchar](100) NULL,
    [RecibeMuestraID] [int] NULL,
    [RecibeMuestra] [nvarchar](100) NULL,
    [EmisionEnCurso] [bit] NULL,
    [Fecha] [datetime] NULL,
    [Fecha_ult_mod] [datetime] NULL,
 CONSTRAINT [PK_Operador] PRIMARY KEY CLUSTERED
(
    [idOperador] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO



Crear el procedimiento .

CREATE PROCEDURE [dbo].[operador_ins]
@Nro int,
@Muestra int,
@Estado nvarchar(50),

--Datos OPERADOR .
@fk_idRecipiente int,
@Recipiente nvarchar(50),
@Volumen decimal(8,1),
@Origen nvarchar(50),
@Tiempo nvarchar(50),
@VenteoEnCurso bit,
@AutorizacionPendiente bit,
@Enclavado bit,
@Urgente bit,
@ResponsableID int,
@Responsable nvarchar(100),
@TomaMuestra nvarchar(100),
@RecibeMuestraID int,
@RecibeMuestra nvarchar(100),
@EmisionEnCurso bit,
@Fecha datetime

AS
BEGIN
SET NOCOUNT ON;
declare @msg AS VARCHAR(100)
Begin Tran Tadd
Begin Try

exec planillas_ins @Nro,@Muestra,@Estado

-- INSERT INTO planillas (Nro ,Muestra , fk_estado ,Fecha_ult_mod )
-- values (@Nro,@Muestra ,'QUIMICO',GETDATE())
-- --SELECT @@IDENTITY;

INSERT INTO operador (
fk_idPlanilla ,
fk_idRecipiente ,
Recipiente,
Volumen ,
Origen ,
Tiempo ,
VenteoEnCurso ,
AutorizacionPendiente ,
Enclavado ,
Urgente ,
ResponsableID ,
Responsable ,
TomaMuestra ,
RecibeMuestraID ,
RecibeMuestra ,
EmisionEnCurso ,
Fecha ,
Fecha_ult_mod )
values (
@@IDENTITY,
@fk_idRecipiente ,
@Recipiente ,
@Volumen ,
@Origen ,
@Tiempo ,
@VenteoEnCurso,
@AutorizacionPendiente ,
@Enclavado ,
@Urgente ,
@ResponsableID ,
@Responsable ,
@TomaMuestra ,
@RecibeMuestraID ,
@RecibeMuestra ,
@EmisionEnCurso ,
@Fecha ,
GETDATE()
)

COMMIT TRAN Tadd
SET @msg = 'Datos Modificados Correctamente.'
End try
Begin Catch
SET @msg = 'Ocurrio un Error: ' + ERROR_MESSAGE() + ' en la línea ' + CONVERT(NVARCHAR(255), ERROR_LINE() ) + '.'
Rollback TRAN Tadd
End Catch
SELECT @msg
END

GO
La funcion en vb.net que realiza el insert:

 Private Function GuardarNuevaEmision() As Boolean
        Try
            Dim fecha As String = dtpFechaMuestreo.Value.Year & "/" & dtpFechaMuestreo.Value.Month & "/" & dtpFechaMuestreo.Value.Day
            Dim Conexion As New SqlClient.SqlConnection(P_StringConexion)
            Dim cmd As New SqlClient.SqlCommand("operador_ins", Conexion)
            cmd.CommandType = CommandType.StoredProcedure

            cmd.Parameters.Add(New SqlClient.SqlParameter("@Nro", lblNro.Text.Trim))
            cmd.Parameters.Add(New SqlClient.SqlParameter("@Muestra", lblMuestra.Text.Trim))
            cmd.Parameters.Add(New SqlClient.SqlParameter("@Estado", "QUIMICO"))
            cmd.Parameters.Add(New SqlClient.SqlParameter("@fk_idRecipiente", cmbRecipientes.SelectedValue))
            cmd.Parameters.Add(New SqlClient.SqlParameter("@Recipiente", cmbRecipientes.Text.Trim))
            cmd.Parameters.Add(New SqlClient.SqlParameter("@Volumen", txtVolumen.Text.Trim))
            cmd.Parameters.Add(New SqlClient.SqlParameter("@Origen", txtOrigen.Text.Trim))
            cmd.Parameters.Add(New SqlClient.SqlParameter("@Tiempo", txtTiempo.Text.Trim))
            cmd.Parameters.Add(New SqlClient.SqlParameter("@VenteoEnCurso", rbEnCursoSI.Checked))
            cmd.Parameters.Add(New SqlClient.SqlParameter("@AutorizacionPendiente", rbAutorizadoPendienteSI.Checked))
            cmd.Parameters.Add(New SqlClient.SqlParameter("@Enclavado", ""))
            cmd.Parameters.Add(New SqlClient.SqlParameter("@Urgente", rbUrgenteSI.Checked))
            cmd.Parameters.Add(New SqlClient.SqlParameter("@ResponsableID", P_IdUsuario))
            cmd.Parameters.Add(New SqlClient.SqlParameter("@Responsable", lblUsuarioLogeado.Text))
            cmd.Parameters.Add(New SqlClient.SqlParameter("@TomaMuestra", txtTomaMuestra.Text.Trim))
            cmd.Parameters.Add(New SqlClient.SqlParameter("@RecibeMuestraID", cmbQuimico.SelectedValue))
            cmd.Parameters.Add(New SqlClient.SqlParameter("@RecibeMuestra", cmbQuimico.Text.Trim))
            cmd.Parameters.Add(New SqlClient.SqlParameter("@EmisionEnCurso", rbEnCursoSI.Checked))
            cmd.Parameters.Add(New SqlClient.SqlParameter("@Fecha", fecha + " " + dtpHoraMuestro.Text))

            Conexion.Open()
            Dim dr As IDataReader = cmd.ExecuteReader
            If dr.Read() Then MsgBox(dr.GetString(0))
            Conexion.Close()
            Return True
        Catch ex As Exception
            MsgBox(ex.Message)
            Return False
        End Try

    End Function