Sei sulla pagina 1di 6

Como trabajar con Procedimientos Almacenados

September 19, 2008 27 Comments


Hace tiempo no escriba nada, hoy revisando los foros me encontr que
siempre existe ese gran problema de manejar procedimientos almacenados
desde .NET humm en realidad no es un gran problema, es muy simple y es
por esto mismo que hice estos cdigos de ejemplo, para que vean como
pueden hacerlo. Espero les sirva a quienes recin se inician.
1.

Ejecutando un Simple Procedimiento Almacenado

Para esto antes que nada debemos tener un SP (Stored Procedure) creado
CREATE PROCEDURE spEjecutar
AS
BEGIN

/* Mi Codigo */

END
GO
Para llamar o ejecutar este SP en .NET solo necesitamos el siguiente cdigo:
Dim objCommand As New SqlClient.SqlCommand(spEjecutar), _
Conexion As String = server=SERVIDOR; user id=usuario;
password=miclave; database=MiBaseDatos'

objCommand.CommandType = CommandType.StoredProcedure
objCommand.Connection = New SqlClient.SqlConnection(Conexion)
objCommand.Connection.Open()
objCommand.ExecuteNonQuery()
objCommand.Connection.Close()

Ups pero est ejemplo es muy simple veamos uno con parmetros y con
devolucin de datos.
2.
Ejecutando un SP con parmetros que devuelva un conjunto de
datos

Aqu tenemos dos opciones, dejar este conjunto de datos en un objeto


SqlDataReader o un SqlDataAdapter, la diferencia principalmente es que
SqlDataReader es que solo se puede leer hacia adelante y est conectada con
la base de datos, en cambio SqlDataAdapter sirve para intercambiar datos
entre la Base de Datos y un conjunto de datos (DataSet o DataTable)
Antes que nada creemos un Procedimiento Almacenado que reciba un
parmetro y devuelva un conjunto de datos.
CREATE PROCEDURE spEjecutar
@Codigo VARCHAR(10)
AS
BEGIN

SELECT Codigo, Nombre


FROM Tabla
WHERE Codigo = @Codigo

END
GO

Para llamar este SP desde .NET a un SqlDataReader


Dim objCommand As New SqlClient.SqlCommand(spEjecutar), _
Conexion As String = server=SERVIDOR; user id=usuario;
password=miclave; database=MiBaseDatos'

objCommand.CommandType = CommandType.StoredProcedure

objCommand.Parameters.Add(@Codigo, SqlDbType.VarChar, 10)


objCommand.Parameters(@Codigo).Value = Mi Cdigo

objCommand.Connection = New SqlClient.SqlConnection(Conexion)


objCommand.Connection.Open()

Dim objReader As SqlDataReader = objCommand.ExecuteReader()

While objReader.Read()
Response.Write(objReader.Item(Codigo).ToString() & - & _
objReader.Item(Nombre).ToString() & <br>)
End While

objReader.Close()
objCommand.Connection.Close()
Para llamar este SP desde .NET a un SqlDataAdapter a un DataSet
Dim objCommand As New SqlClient.SqlCommand(spEjecutar), _
Conexion As String = server=SERVIDOR; user id=usuario;
password=miclave; database=MiBaseDatos'

objCommand.CommandType = CommandType.StoredProcedure

objCommand.Parameters.Add(@Codigo, SqlDbType.VarChar, 10)


objCommand.Parameters(@Codigo).Value = Mi Cdigo

objCommand.Connection = New SqlClient.SqlConnection(Conexion)


objCommand.Connection.Open()

Dim objAdapter As New SqlDataAdapter(objCommand), _


objDataSet As New DataSet

objAdapter.Fill(objDataSet, Tabla)

objCommand.Connection.Close()

Dim objRow As DataRow

For Each objRow In objDataSet.Tables(Tabla).Rows


Response.Write(objRow.Item(Codigo).ToString() & - & _
objRow.Item(Nombre).ToString() & <br>)
Next

Para llamar este SP desde .NET a un SqlDataAdapter a un DataTable


Dim objCommand As New SqlClient.SqlCommand(spEjecutar), _
Conexion As String = server=SERVIDOR; user id=usuario;
password=miclave; database=MiBaseDatos'

objCommand.CommandType = CommandType.StoredProcedure

objCommand.Parameters.Add(@Codigo, SqlDbType.VarChar, 10)


objCommand.Parameters(@Codigo).Value = Mi Cdigo

objCommand.Connection = New SqlClient.SqlConnection(Conexion)


objCommand.Connection.Open()

Dim objAdapter As New SqlDataAdapter(objCommand), _


objDataTable As New DataTable

objAdapter.Fill(objDataTable)

objCommand.Connection.Close()

Dim objRow As DataRow


For Each objRow In objDataTable.Rows
Response.Write(objRow.Item(Codigo).ToString() & - & _
objRow.Item(Nombre).ToString() & <br>)
Next

3.
Ejecutando un SP con parmetros que devuelva un parmetro
de Salida.
Para este caso tenemos el siguiente Procedimiento Almacenado con 2
parmetros uno de entrada y otro de salida.
CREATE PROCEDURE spEjecutar
@Codigo VARCHAR(10),
@Nombre VARCHAR(100) OUT
AS
BEGIN

SELECT @Nombre = Nombre


FROM Tabla
WHERE Codigo = @Codigo

END
GO

Para llamar este SP y obtener el resultado en el parmetro de salida desde


.NET se debe realizar lo siguiente:
Dim objCommand As New SqlClient.SqlCommand(spEjecutar), _
Conexion As String = server=SERVIDOR; user id=usuario;
password=miclave; database=MiBaseDatos'

objCommand.CommandType = CommandType.StoredProcedure

objCommand.Parameters.Add(@Codigo, SqlDbType.VarChar, 10)


objCommand.Parameters(@Codigo).Value = Mi Cdigo

objCommand.Parameters.Add(@Nombre, SqlDbType.VarChar, 100)


objCommand.Parameters(@Nombre).Direction = ParameterDirection.Output

objCommand.Connection = New SqlClient.SqlConnection(Conexion)


objCommand.Connection.Open()
objCommand.ExecuteScalar()

Response.Write(El Nombre es: &


objCommand.Parameters(@Nombre).Value)
objCommand.Connection.Close()

Espero les sea de utilidad, no es tan complejo pero estoy seguro que ser de
ayuda para los novatos o no tan novatos.
Saludos,
Jhonny Vargas
Santiago de Chile

Potrebbero piacerti anche