Como executar procedure usando ADO.Net

O que é mais visto hoje em dia é a utilização de ORM(NHibernate ou Enitity Framework), na minha opnião é uma forma mais estruturada e melhor para fazer a camada de dados, porém atualmente ainda existe muitos sistemas que utilizam a camada de dados com ADO.Net, tanto para apenas manutenção de sistemas quanto para sistemas novos. Por isso acho interessante resaltar como utilizar as classes nativas do ADO.Net para executar Funções no SqlServer  ou Stored Procedures.

Quando se executa comandos SQL diretamente com SqlCommand não é necessário definir o tipo de comando, mas para Stored Procedures é necessário definir a propriedade CommandType para StoredProcedure assim informando como o SqlCommand deve tratar o comando.

Quando a procedure é de retorno simples, quando nao tem parametros de output, é possivel fazer uma chamada utilizando o ExecuteScalar para trazer o retorno, como mostrado abaixo:

SqlCommand command = new SqlCommand("NomeProcedure",con);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@Parametro1",SqlDbType.VarChar,250,"DescricaoParametro"));
command.Parameters[0].Value = "ValorParametro1";
command.Parameters.AddWithValue("@Parametro2" , "ValorParametro2" );
int retorno =  (int)command.ExecuteScalar();

Quando a procedure retorna valores de output é necessário no parametro do comando colocar a direção do parametro(ParameterDirection), nesse parametro não é necessário definir nenhum valor de entrada, mas apos a execução da Procedure, o parametro criado irá ter o valor de retorno, como mostrado abaixo:

SqlCommand command = new SqlCommand("NomeProcedure",con);
command.Parameters.Add(new SqlParameter("@Parametro1", SqlDbType.VarChar, 250, ParameterDirection.Output, false, 0, 10, "sourceColumn", DataRowVersion.Default, null));
command.Parameters.AddWithValue("@Parametro2" , "ValorParametro2" );
command.ExecuteNonQuery();
string retorno2 = command.Parameters[0].Value.ToString();
Anúncios