Jump to content
Sign in to follow this  
skcratch

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

Recommended Posts

skcratch

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!

:)

Share this post


Link to post
Share on other sites
Betovsky

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);


"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites
skcratch

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!

:)

Share this post


Link to post
Share on other sites
skcratch

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!

:)

Share this post


Link to post
Share on other sites
Betovsky

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.

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites
Betovsky

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 :)


"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites
skcratch

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

Share this post


Link to post
Share on other sites
skcratch

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.