• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

skcratch

[Resolvido] - Adicionar parâmetro de tipo genérico a comando SQL (C#)

10 mensagens neste tópico

Viva!

Tenho o seguinte método, que permite adicionar um parâmetro a um comando SQL:

private void adicionarParametroSql(ref SqlCommand sqlCommand, string parameterName, Int16 parameterValue)
{
        parameterName = "@" + parameterName;
        sqlCommand.Parameters.Add(new SqlParameter(parameterName, SqlDbType.SmallInt));
        sqlCommand.Parameters[parameterName].Value = parameterValue;
}

Neste caso, o tipo do parâmetro está definido como Int16 mas eu gostava de o tornar genérico de forma a suportar mais tipos de dados.

Será que alguém pode dar uma ajuda?

Cumps!

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem esse ref aí não está a fazer nada portanto pode saltar fora. Depois podes tentar com métodos genéricos, algo tipo isto:

      private void AddParam<T>(SqlCommand command, String paramName, T paramValue) {
         SqlParameter param = command.CreateParameter();
         param.ParameterName = paramName;
         param.Direction = ParameterDirection.Input;
         param.Value = paramValue;

         command.Parameters.Add(param);
      }

Para usar:

SqlCommand command = ...;
AddParam(command, "@param1", 15);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva!

Antes demais, obrigado pela ajuda. O ref não é necessário, por o tipo de dados SqlCommand ser implementado pela framework .NET, e assim ser sempre passado por referência?

Cumps!

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva!

Uma outra pergunta: existe algum problema em não especificar o tipo de dados correspondente em SQL àquele que é passado no comando SQL que se pretende executar?

Grato desde já pela ajuda,

Cumps!

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O ref não é necessário, por o tipo de dados SqlCommand ser implementado pela framework .NET, e assim ser sempre passado por referência?

Yep. É uma classe logo é passado sempre por referência. Portanto teres ref a uma classe penso que só seja útil se quiseres mudar a instância dessa classe para uma nova. O que não é o caso.

Uma outra pergunta: existe algum problema em não especificar o tipo de dados correspondente em SQL àquele que é passado no comando SQL que se pretende executar?

Penso que não seja necessário. Se usares tipos de dados próprios, int, strings, datetime, Guid, etc, onde existe claramente um mapeamento directo para os tipos de BD, acho que o driver consegue mapear correctamente os tipos. Portanto, a não ser que uses dados criados por ti, ou dados que não façam nenhum sentido na BD, não deverás ter problemas.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva!

Muito obrigado pelos esclarecimentos prestados.

Cumps!

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No probs. Estamos aqui é para nos ajudarmos uns aos outros :)

PS: Modificar o assunto é uma boa prática, mas foi implementado a pouco tempo o botão de marcar o tópico como resolvido (Topic Solved), que até é mais prático. E fica também mais bonito, fica com um visto verde. Marquei-o por ti, mas já ficas a saber para a próxima :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva!

Ao contrário do que pensava, este método ainda não se encontra "fechado". Se pretender manter a assinatura do método actual, qual julgam ser a melhor forma para que o método permita também adicionar parâmetro de saída? Ou julgam que será melhor, "replicar" este método e adequar cada um deles para cada tipo de parâmetro?

Grato desde já pela ajuda,

Cumps!

:D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva!

Depois de ter pensado um pouco sobre aquilo que tinha perguntado anteriormente, decidi implementar dois métodos génericos para adição de parâmetros a um objecto do tipo SqlCommand: um para parâmetros de entrada e outro para parâmetros de saída. Creio que um método único para ambos se tornaria algo complexo, por forma a implementar as especificidades próprias de cada um deles.

Grato a todos pela ajuda e comentários!

Cumps!

:D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora