Hace tiempo no escribía 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 códigos de ejemplo, para que vean como pueden hacerlo. Espero les sirva a quienes recién 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 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()
Ups… pero esté ejemplo es muy simple… veamos uno con parámetros y con devolución de datos.
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()
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