Sei sulla pagina 1di 5

Como Trabajar con Procedimientos

Almacenados
Me he encontrado que siempre existe ese gran problema de manejar
procedimientos almacenados desde .NET En realidad no es un gran
problema, es muy simple y he aqu estos cdigos de ejemplo, para que vean
cmo pueden hacerlo. Lea e interprete los ejemplos, de ser posible trate de
implementar formulario para cada uno de los ejemplos. Espero les sirva como
base para poder cambiar el cdigo de los ejemplos del libro para que usen los
procedimientos almacenados que uds ya crearon en la Base de Datos
VideoStarz. Descarguen TeamViewer he instlenlo en su computadora para
poder asistirlos desde mi casa.

Ejecutando un Simple Procedimiento


Almacenado
Para esto antes que nada debemos tener un SP (Stored Procedure) creado
CREATE PROCEDURE spMensaje
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()
Ooops pero est ejemplo es muy simple veamos uno con parmetros y con
devolucin de datos.

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

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()

Potrebbero piacerti anche