Acesso à Banco de Dados III Usando Parâmetros

01/15/2008 11:32:00 By Felipe Pessoto

Agora que já sabemos como executar comando no banco de dados, vamos aprender à executá-los usando parâmetros.

Os parâmetros são como variáveis que contém valores que são enviados e retornados do banco de dados, eles têm tipo e um conteúdo assim como as variáveis que usamos nos nossos programas.

Para definirmos o tipo do parâmetro usamos o enum SqlDbType que têm os tipos usados no SQL Server(para o Oracle temos o OracleType). Tudo isso será melhor abordado adiante, faremos um exemplo prático.

Geralmente usamos parâmetros quando queremos mudar algo rapidamente e especificamente, na maioria das vezes na cláusula WHERE. Outra vantagem é a segurança proporcionada, pois ao deixar de fazer concatenação de strings para formar uma Query SQL eliminamos o risco de um SQL Injection. A seguir um exemplo de uma Query usando parâmetro:

SELECT nome, idade, cidade FROM Clientes WHERE cd_cliente= @Codigos

Os parâmetros podem ser de entrada, saída ou entrada e saída, definido na propriedade Direction. Por padrão o parâmetro é definido como de entrada.

Para criarmos um parâmetro declaramos uma instância da classe Parameter, e atribuímos o seu nome e tipo de dado, que deve coincidir com o esperado pela fonte de dados, exemplo:

SqlParameter MeuParametro = new SqlParameter();
MeuParametro.ParameterName = "@Codigo";
MeuParametro.SqlDbType = SqlDbType.Int;

//Exemplo definindo como parâmetro de saída
MeuParametro.Direction.ParameterDirection.Output;

Depois que temos nosso parâmetro, vamos adicionar ele ao objeto Command. Os objetos Command tem uma propriedade chamada Parameters, que representa uma coleção de parâmetros. Então usamos o método Add:

MeuComando.Parameters.Add(MeuParametro);

Falta apenas, é claro, definirmos o valor do nosso parâmetro(caso seja de entrada ou de entrada e saída):

MeuParametro.Value = 50;

A partir daí não muda mais nada, podemos executar o nosso comando como fizemos anteriormente:

SqlDataReader reader = MeuComando.ExecuteReader();

Comments (0)