none
Passar como parametro um número muito grande RRS feed

  • Pergunta

  • Olá, galera do mal.

    Me deparei com algo que nunca tinha visto antes: trabalhar com um número que é maior que int64.

    Pois bem o cenário: há uma proc, mas umas daquelas em que não se pode mexer. Pois bem, não posso altera-la. Ela recebe um valor como parametro, o último valor que precisei passar foi 9.789.759.497.868.470.277.330 e é um número bem grande, acima do limite do int64. Mas eu estava passando ele como texto até que precisei usa-lo como parametro.

    Eu estou usando a classe SqlCommand do ADO.Net e ao executar a proc dá erro pois dá erro ao passra essa string para a proc que espera um tipo Numeric. Tentei converter a string para int e vi que não dava por causa do tamanho. Também tentei converter para double antes de passar o parametro, mas ele dá erro ao tentar converter o tipo de ponto flutuante para o Numeric, que é esperado pela proc.

    ...

    agora eu não sei o que fazer :p

    Estou pesquisando, mas não acho alternativas. Talvez o jeito seja mudar a proc...mas eu não tenho acesso a ela :p


    Terei prazer em tentar te ajudar :)

    Sou só uma little padawan que tem sorte de andar com jedis, mas farei o possível por quem precisar :)

    Se quiser: mayumisatox@gmail.com ou @MayogaX

    segunda-feira, 27 de agosto de 2012 22:05

Todas as Respostas

  • Olá Priscila,

    Tudo bem? :)

    A mensagem de erro, esta sendo disparada pelo .Ne Framework na hora do cast para Decimal ou pela stored procedure?

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Data Platform Development
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    terça-feira, 28 de agosto de 2012 01:04
    Moderador
  • Opa, Fernando, tudo okay? Obrigada pela ajuda o/

    Então, o erro acontece na execução do ExecuteNonQuery, a mensagem de erro ao passar o double é:

    "Error converting data type float to numeric."

    Eu estou um pouco confusa agora, não vejo outra forma. Pesquisando por passar valores grandes pelo ado.net só vejo exemplos com blobs, mas eu só quero passar um número...muito grande.




    Terei prazer em tentar te ajudar :)

    Sou só uma little padawan que tem sorte de andar com jedis, mas farei o possível por quem precisar :)

    Se quiser: mayumisatox@gmail.com ou @MayogaX

    terça-feira, 28 de agosto de 2012 12:49
  • Olá Priscila,

    Pela mensagem de erro, parece que a procedure é quem esta dando o erro e não o ADO.Net.

    Neste caso temos dois cenários:

    1 - Pode ser que o erro esteja ocorrendo dentro da procedure, quando alguma atribuição de valores entre variáveis é feita internamente. Para identificar isso, crie um procedure para testes que receba este mesmo valor que esta passando, e se ela receber normalmente o valor então o problema é interno, provalmente alguma variável interna da procedure não esta aceitando o cast de FLOAT para NUMERIC

    2 - O problema pode estar no parâmetro, neste caso vc tb pode criar uma segunda procedure que encapsule a primeira e receba os parâmetros em um formato que aceite um número tão grande. Mas acho que este caso é mais difícil, pois vc não tem acesso a primeira procedure e provavelmente seu acesso é limitado.

    Como vc esta passando os dados para a procedure? Poderia postar o bloco de código?

    Quais o tipo de dados do parâmetro que esta com problema? Me detalhe a precisão dele, vou fazer alguns teste.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Data Platform Development
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    terça-feira, 28 de agosto de 2012 12:57
    Moderador
  • tche, acho eu que não tem jeito mesmo... números que ultrapassam o int64(vulgo long) só se usa como string como você usava...

    nesse contexto acredito que não há o que fazer se não tens acesso a proc....(a menos que em alguma atualização futura ele aceite um int128 hehehe...)

    quarta-feira, 29 de agosto de 2012 13:46
  • Olá Priscila,

    Alguma evolução nesta questão?

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Data Platform Development
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    quinta-feira, 30 de agosto de 2012 11:49
    Moderador
  • Algo que deva ser inserido como um número e tenha esse tamanho, só pode ser calculo espacial :p

    Mas se não houvesse operação matemática/física talvez seria interessante armazanar mesmo como texto...

    Priscila, realmente não há possibilidade de mudanças? Esse número é usado em operações?

    Tarefa difícil.
    Conseguiu algo já? Boa sorte.

    É ajudando os outros que nos ajudamos...

    quarta-feira, 5 de setembro de 2012 02:35