domingo, 20 de septiembre de 2009

Crear y Ejecutar un Procedimiento Almacenado (Store Procedure) en C#.net

Una característica de muchos gestores de bases de datos como Sql Server, es que permiten guardar las consultas para poder ejecutarlas desde nuestro código. Asi conseguimos abstraer nuestra lógica de datos de nuestra lógica de negocio. En Sql Server estas consultas se llaman "Procedimientos Almacenados". Un ejemplo de esto es:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE dbo.sp_test

-- Add the parameters for the stored procedure here

@IdFoo int
AS
BEGIN
SELECT
*

FROM
Foo

WHERE
IdFoo = @IdFoo

END
GO SET ANSI_NULLS ON
GO
SET
QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE dbo.sp_test
-- Add the
parameters for the stored procedure here
@IdFoo
int
AS
BEGIN
SELECT
*
FROM
Foo
WHERE
IdFoo =
@IdFoo
END
GO


Este procedimiento recibe como parametro el entero @IdFoo, y busca en la tabla Foo, un registro que tenga el campo IdFoo igual al parametro de entrada @IdFoo. Para llamar este procedimiento de almacenado desde nuestro código tan sólo debemos hacer lo siguiente

public void ExecuteStoreProcedure(int idFoo)
{

using (SqlConnection connection = new SqlConnection(connectionString))

{

using (SqlCommand command = new SqlCommand())

{
connection.Open();


command.Connection = connection;

command.CommandType = System.Data.CommandType.StoredProcedure;

command.CommandText = "sp_test";

command.CommandTimeout = 10;


command.Parameters.AddWithValue("@IdFoo", idFoo);


SqlDataReader reader = command.ExecuteReader();

}
}
} public void
ExecuteStoreProcedure(int idFoo)
{
using (SqlConnection connection = new
SqlConnection(connectionString))
{
using (SqlCommand command = new
SqlCommand())
{
connection.Open();
command.Connection =
connection;
command.CommandType =
System.Data.CommandType.StoredProcedure;
command.CommandText =
"sp_test";
command.CommandTimeout =
10;
command.Parameters.AddWithValue("@IdFoo", idFoo);
SqlDataReader reader
= command.ExecuteReader();
}
}
}


Como vemos es muy fácil, creamos una conexión, y un comando. A este comando le decimos que ejecutará el procedimiento sp_test y le pasamos el parametro idFoo como @IdFoo. El resultado de la consulta se guarda en un SqlDataReader. Ahora podremos recorrer este SqlDataReader para devolver algún dato o pasar la información a un objeto de negocio.
La principales ventajes de los procedimientos almacenados son:

  • Evita en parte los molestos ataques por inyección sql (sql injection).
  • La velocidad de la consulta es mayor.
  • Toda la logica de acceso a datos se encuentra en la base de datos.

2 comentarios:

Anónimo dijo...

Que onda Santiago,

Recibí tu mensaje por el blog, explicame mas detalladamente que es lo que necesitas

para que te diga en cuanto tiempo lo tengo y cuanto te va a salir $$.

Ok.

Saludos.

Lic. Adrian Melo Villegas

Anónimo dijo...

[url=http://www.ganar-dinero-ya.com][img]http://www.ganar-dinero-ya.com/ganardinero.jpg[/img][/url]
[b]Queres ganar dinero desde tu casa y buscas informacion[/b]
Hemos hallado la mejor pagina web en internet de como ganar dinero internet. Como nos ha sido de utilidad a nosotros, tambien les puede ser de interes para ustedes. No son unicamente metodos de ganar dinero con su pagina web, hay todo tipo de formas de ganar dinero en internet...
[b][url=http://www.ganar-dinero-ya.com][img]http://www.ganar-dinero-ya.com/dinero.jpg[/img][/url]Te recomendamos entrar a [url=http://www.ganar-dinero-ya.com/]Ganar-dinero-ya.com[/url][url=http://www.ganar-dinero-ya.com][img]http://www.ganar-dinero-ya.com/dinero.jpg[/img][/url][/b]