Você está na página 1de 6

Stored Procedure com ASP.

NET C#
07/02/2012 | 07h06min
por Cesar Cassiano Schimanco
J avaliou este artigo?
Avaliao 4,7/5 - 13 votos.

inShare
Depois de vrios questionamentos sobre como criar e como utilizar stored procedures
no C#,
resolvi criar este artigo.
Outra pergunta, qual a diferena entre executar uma query no C# e usar stored
procedure?
Bom, eu particularmente prefiro usar as stored procedures apenas para fazer coisas mais
complexas, abaixo vou citar alguns dos benefcios das stored procedures.

O cdigo fica todo centralizado no SQL.

Stored procedures so pr-compiladas, isso normalmente as torna mais rpidas na


execuo. Pois no C#, a cada chamada a query compilada novamente.

Quando estiver usando um banco de dados remoto, menos dados sero enviados,
apenas o nome e os parmetros.

Resumo: Em termos de desempenho, usar stored procedures pode no fazer nenhuma


diferena, e se fizer, elas podem ser imperceptveis. A grande vantagem centralizar todas
as consultas e ter um projeto mais limpo. Sem contar que a query vai ficar colorida e vai ter
a ajuda do intellisense para auto completar...

Vamos iniciar criando uma stored procedure e depois vou mostrar como alterar ela.
Para quem usa o SQL Server Management Studio em portugus.

Criar uma stored procedure

Editar uma stored procedure

Para quem usa o SQL Server Management Studio em ingls.

Criar uma stored procedure

Editar uma stored procedure

Exemplo de como criar uma stored procedure


-- ================================================
--Criar nova PROCEDURE
CREATE PROCEDURE spInsertUser
-- Adicionar os parmetros da stored procedure
-- Nome e tipo do parmetro.

@userName NVARCHAR(400),
@userEmail NVARCHAR(400)
AS
BEGIN
--varivel para o numero de usurios cadastrados
DECLARE @count AS INT;
--Setando o nmero de usurios a varivel @count
SET @count = (SELECT COUNT(*) FROM tblUsers);

--Verificar o nmero de usurios cadastrados


IF @count < 5
BEGIN
INSERT INTO tblUsers
(userName, userEmail, userPhone)
VALUES
(@userName,@userEmail,@userPhone)
END
END

Exemplo de como editar/modificar uma stored procedure


-- ================================================
--ALTERAR PROCEDURE
ALTER PROCEDURE [dbo].[spInsertUser]
-- Adicionar os parmetros da stored procedure
-- Nome e tipo do parmetro.
@userName NVARCHAR(400),
@userEmail NVARCHAR(400),
@userPhone NVARCHAR(15)
AS
BEGIN
--varivel para o numero de usurios cadastrados
DECLARE @count AS INT;
--Setando o nmero de usurios a varivel @count
SET @count = (SELECT COUNT(*) FROM tblUsers);

--Verificar o nmero de usurios cadastrados


IF @count < 5
BEGIN
INSERT INTO tblUsers
(userName, userEmail, userPhone)
VALUES

(@userName,@userEmail,@userPhone)
END
END

O exemplo acima de uma stored procedure que vai verificar se j existem 5 usurios
cadastrados. Se tiver retorna 0, se no tiver, cadastra e retorna 1.
Como fica no C#
Exemplo 1 (Exemplo simples de como executar uma Stored procedure no C# para fazer um
INSERT)
using (SqlConnection conn = new SqlConnection(
"server=.\\SQLEXPRESS;Database=dbTeste;User
ID=user;Password=password;Trusted_Connection=False;"))
{
//Criando o SqlCommand
SqlCommand cmd = new SqlCommand();
//Setando a conexo para o SqlCommand
cmd.Connection = conn;
//Nome da stored procedure
cmd.CommandText = "spInsertUser";
//Definindo o tipo de comando como StoredProcedure
cmd.CommandType = System.Data.CommandType.StoredProcedure;

//Adicionar os parmetros
cmd.Parameters.AddWithValue("@userName", "Cesar Cassiano");
cmd.Parameters.AddWithValue("@userEmail", "cesar@cbsa.com.br");
cmd.Parameters.AddWithValue("userPhone", "00 0000 0000");

//Abrir a conexo
conn.Open();
//Executar a stored procedure
int intReturn = (int)cmd.ExecuteNonQuery();
//Verifica se executou o INSERT
if (intReturn != -1)
Response.Write("Usurio cadastrado.");
else
Response.Write("Limite mximo de usurios atingido.");
//Fechar a conexo
conn.Close();
}

Exemplo 2 (Exemplo simples de como executar uma Stored procedure no C# para retornar
dados fazendo um SELECT com IF)
Stored procedure
CREATE PROCEDURE spSelectUser
@userName NVARCHAR(400),
@userEmail NVARCHAR(400),
@userPhone NVARCHAR(15)
AS
BEGIN
SET NOCOUNT ON;

DECLARE @sql AS NVARCHAR(4000);


--Montando a query, verificando se o usurio est ativo
SET @sql = 'SELECT * FROM tblUsers WHERE userActive = 1 '
--Verificar se o parmetro @userName null ou ''
--caso for, ele no ser adicionado a query.
IF (@userName <> null OR @userName <> '')
SET @sql = @sql + ' AND userName LIKE ''%' + @userName
+ '%'''

--Verificar se o parmetro @userEmail null ou ''


IF (@userEmail <> null OR @userEmail <> '')
SET @sql = @sql + ' AND userEmail LIKE ''%' +
@userEmail + '%'''

--Verificar se o parmetro @userPhone null ou ''


IF (@userPhone <> null OR @userPhone <> '')
SET @sql = @sql + ' AND userPhone = ' + @userEmail

--Executa a query
EXECUTE(@sql)
END
GO

C#
using (SqlConnection conn = new SqlConnection(
"server=.\\SQLEXPRESS;Database=dbTeste;User
ID=user;Password=password;Trusted_Connection=False;"))
{

//Criando o SqlCommand
SqlCommand cmd = new SqlCommand();
//Setando a conexo para o SqlCommand
cmd.Connection = conn;
//Nome da stored procedure
cmd.CommandText = "spSelectUser";
//Definindo o tipo de comando como StoredProcedure
cmd.CommandType = System.Data.CommandType.StoredProcedure;

//Adicionar os parmetros
cmd.Parameters.AddWithValue("userName", "Cassiano");
//Enviando @userEmail = NULL
cmd.Parameters.AddWithValue("userEmail", DBNull.Value);
//Enviando @userPhone = ''
cmd.Parameters.AddWithValue("userPhone", "");

//Abrir a conexo
conn.Open();

//CommandBehavior vai fechar a conexo aps usar o DataReader


SqlDataReader dr =
cmd.ExecuteReader(CommandBehavior.CloseConnection);

//Lendo o DataReader
while (dr.Read())
{
//Imprimir os dados do DataReader
Response.Write(dr["userName"]);
Response.Write(dr["userEmail"]);
}
}

Você também pode gostar