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




Procedimientos almacenados en Mysql

Bueno , retomando la programacion de Rp-basic , que es un sistema de registro de pacientes el cual de a poco estoy realizando , me surgió el tema de empezar a trabajar con procedimientos almacenados, para realizar los insert y update de la base de datos y de esta manera ir parendiendo como utilizarlos .

Los procedimientos almacenados pueden devolver valores calculados , tablas , o nada ,
ademas pueden hacerse bucles repetitivos , declararse variables para trabajar dentro , verificaciones , etc ..

con esto que les quiero decir , que el ejemplo que doy aca es muy pavo .. que el poder de los procedimientos almacenados es mucho mayor de lo que se ve acá , podemos hacer en definitiva q casi toda la lógica de nuestra aplicación en lo que refiere a la carga de datos y calculos derivadoos de estos se realicen en la base de datos .

mas adelante voy a subir un ejemplo de como se llama a un procedimiento almacenado desde visual estudio.

vamos con el ejemplo a crear un procedimiento almacenado que realiza un insert en una tabla.


Trabajo con xampp -> phpmyadmin

Los procediminetos almacenados en phpmyadmin son llamados rutinas .. asi que crearemos una nueva rutina para realizar un insert .

Base de datos "rp"

La tabla : pacientes.


 

vamos a la extructura de la base de datos y en el menu aparecera uno llamado rutina y vamos a crear una nueva rutina.




Usando el asistente quedaria algo asi :


EL codigo generado por phpmyadmin :


 DROP PROCEDURE `pacientesl_ins`;
CREATE DEFINER=`root`@`localhost`
 PROCEDURE `pacientesl_ins`
(
IN `@apellido` VARCHAR(50),
IN `@nombre` VARCHAR(50),
IN `@nroHC` VARCHAR(50),
IN `@nroDoc` VARCHAR(50),
IN `@idsexo` VARCHAR(5),
 IN `@direccion` VARCHAR(50),
IN `@tel` VARCHAR(50),
IN `@idObra` INT
)
NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER

INSERT into papcientes
(Apellido,Nombres,nrHC,nroDoc,fk_idSexo,Direccion,Telefono,fk_idObraSocial)
values
(@apellido,@nombre,@nroHC,@nroDoc,@idsexo,@direccion,@tel,@idObra)

 Bueno , ahoa si seleccionamos la base de dattos y vamos al apartadó de rutinas nos aparecera el nombre de la rutina creada , podremos editarla , ejecutarla , exportarla y eliminarla .  : 

Ejecucion ejemplo :



 o por código :

seria algo asi como :

call pacientesl_ins('valro','valor2';'valor3';'valor4')