Vous êtes sur la page 1sur 9

EJECUTAR UN PROCEDIMIENTO

ALMACENADO DE SQL SERVER


DESDE C#
JUNIO 10, 2013

Para explicar este tema se cre una sencilla aplicacin de formas en


Visual Studio utilizando C#, tambin se cre una base de datos que
cuenta con tres tablas y un procedimiento almacenado para de acuerdo
a las variables que recibe el parmetro realice un insert en alguna de las
tablas.
El procedimiento almacenado comparar al variable edad y dependiendo
de ella insertar a la persona en la tabla debida, adems retorna una
variable

de

comprobacin

para

asegurar

que

la

operacin

fue

satisfactoria.
Realizando una prueba.

Cuando ocurre un error: en este ejercicio pueden surgir varios pues no


se validan los datos que se envan al procedimiento almacenado.

Cuando la operacin fue satisfactoria:

Comprobacin de la insercin en SQL Server

Diseo de la forma:

Elementos del combobox:

Cdigo de la aplicacin:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Data.SqlClient;//libreria para manejar sql
namespacePersonal
{
public partial class Form1 : Form
{
publicForm1()
{
InitializeComponent();
}
privatevoid btnguardar_Click(objectsender, EventArgs e)
{
//declaramos una cadena de conexin con los datos de nuestro
//manejador y la base de datos
string cadenaconexion = @Data Source=HUGUITO-PC\HUGO;Initial
Catalog=Prueba;Integrated Security=True;
//una variable boleana para determinar si se realiz la operacin
//que realiza el procedimiento almacenado, la inicializamos como false

bool success = false;


//declrarmos la conexin
SqlConnection LaConexion = null;
//declaramos una transaccin para que todo lo que se realiza en ella, desde una
//simple insercin hasta multiples o, que involucren ms operaciones sobre la
//base de datos puedan deshacerse si se presenta un error
SqlTransaction LaTransaccion = null;
//variable para el valor de retorno
int Valor_Retornado = 0;
//iniciamos un try catch
try
{
//seguimos con la conexion
LaConexion = new SqlConnection();
//asignamos a la conexin la cadena de conexin que declaramos anteriormente
LaConexion.ConnectionString = cadenaconexion;
//se abre la conexin
LaConexion.Open();
//se inicia la transaccin
LaTransaccion =
LaConexion.BeginTransaction(System.Data.IsolationLevel.Serializable);
//especificamos el comando, en este caso el nombre del Procedimiento
Almacenado
SqlCommand comando = new SqlCommand(SPPersonal, LaConexion,
LaTransaccion);
//se indica al tipo de comando que es de tipo procedimiento almacenado
comando.CommandType = CommandType.StoredProcedure;
//se limpian los parmetros
comando.Parameters.Clear();
//comenzamos a mandar cada uno de los parmetros, deben de enviarse en el
//tipo de datos que coincida en sql server por ejemplo c# es string en sql server
es varchar()
comando.Parameters.AddWithValue(@Nombre, txtnombre.Text);

comando.Parameters.AddWithValue(@Apellp, txtapellp.Text);
comando.Parameters.AddWithValue(@Apellm, txtapellm.Text);
comando.Parameters.AddWithValue(@Edad,Convert.ToInt32(txtedad.Text));
comando.Parameters.AddWithValue(@Sexo, cboxsexo.SelectedItem);
//declaramos el parmetro de retorno
SqlParameter ValorRetorno
= new SqlParameter(@Comprobacion, SqlDbType.Int);
//asignamos el valor de retorno
ValorRetorno.Direction = ParameterDirection.Output;
comando.Parameters.Add(ValorRetorno);
//executamos la consulta
comando.ExecuteNonQuery();
// traemos el valor de retorno
Valor_Retornado = Convert.ToInt32(ValorRetorno.Value);
//dependiendo del valor de retorno se asigna la variable success
//si el procedimiento retorna un 1 la operacin se realiz con xito
//de no ser as se mantiene en false y pr lo tanto fall la operacin
if (Valor_Retornado ==1)
success = true;
}
catch (Exception)
{
//al ocurrir un error mostramos un mensaje
MessageBox.Show(Error en la
operacin, Error, MessageBoxButtons.OK,MessageBoxIcon.Error);
}
finally
{
//si el procedimeinto se efectu con xito
if (success)
{
//se realiza la transaccin
LaTransaccion.Commit();

//cerramos la conexin
LaConexion.Close();
//mensaje de operacin satisfactoria
MessageBox.Show(Persona
guardada\nsatisfactoriamente, Aviso,MessageBoxButtons.OK, MessageBoxIcon.Informatio
n);
}
//si se present algun error
else
{
//se deshace la transaccin
LaTransaccion.Rollback();
//cerramos la conexin
LaConexion.Close();
}
}
}
}
}

Base de datos con las tres tablas y el


procedimiento almacenado:
create database Prueba
go
use Prueba
go
create table Menores
(
ID_Menores int primary key identity(1,1),
Nombre_M varchar(30) not null,
Apellp_M varchar(20) not null,
Apellm_M varchar(20) not null,
Sexo_M char(1) not null,
Fecha_Reg_M date not null

)
create table Adultos
(
ID_Adutos int primary key identity(1,1),
Nombre_A varchar(30) not null,
Apellp_A varchar(20) not null,
Apellm_A varchar(20) not null,
Sexo_A char(1) not null,
Fecha_Reg_A date not null
)
create table Adulto_Mayor
(
ID_Mayores int primary key identity(1,1),
Nombre_AM varchar(30) not null,
Apellp_AM varchar(20) not null,
Apellm_AM varchar(20) not null,
Sexo_AM char(1) not null,
Fecha_Reg_AM date not null
)
create procedure SPPersonal
(
@Nombre varchar(30),
@Apellp varchar(20),
@Apellm varchar(20),
@Edad int,
@Sexo char(1),
@Comprobacion int output
)
as
begin
inicia la transaccin
begin transaction

inician las comparaciones de edad para determinar donde insertar a la


persona
si existe un error al insertar se pasa a la parte de error
if(@Edad<18)
begin
INSERT INTOMenores(Nombre_M,Apellp_M,Apellm_M,Sexo_M,Fech
a_Reg_M)VALUES(@Nombre,@Apellp,@Apellm,@Sexo,GETDATE())
if @@ERROR>0
goto error
end
else if(@Edad>=18 and @Edad<65)
begin
INSERT INTOAdultos(Nombre_A,Apellp_A,Apellm_A,Sexo_A,Fecha_
Reg_A)VALUES(@Nombre,@Apellp,@Apellm,@Sexo,GETDATE())
if @@ERROR>0
goto error
end
else if(@Edad>=65)
begin
INSERT INTOMenores(Nombre_M,Apellp_M,Apellm_M,Sexo_M,Fech
a_Reg_M)VALUES(@Nombre,@Apellp,@Apellm,@Sexo,GETDATE())
if @@ERROR>0
goto error
end
si no hubo errores se termina la transaccin y se asigna a
@Comprobacion el valor de 1
para indicar en c# que fue exitosa la operacin
commit transaction
set @Comprobacion=1
return
si hubo algn error se deshace la transaccin y se asigna a
@Comprobacin el valor de 0
para indicar en c# que hubo un error

error:
rollback transaction
set@Comprobacion=0
end

Vous aimerez peut-être aussi