lunes, 6 de enero de 2014

EJECUTAR PROCEDIMIENTOS ALMACENADOS EN ASP

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 código:
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()

2.       Ejecutando un SP con parámetros 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 parámetro 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 Código"

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 Código"

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 Código"

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 parámetros que devuelva un parámetro de Salida.
Para este caso tenemos el siguiente Procedimiento Almacenado con 2 parámetros 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 parámetro 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 Código"

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

No hay comentarios:

Publicar un comentario