none
Redesenhar a paremetrização para procedure RRS feed

  • Pergunta

  • Olá pessoal,

    Estou começando nessa área de desenvolvimento e estou com uma dúvida.

    Preciso reduzir a utilização de cache de procedure porque percebi que os contadores de cache no servidor de banco ficão muito altos no final do dia e degrada a performance do banco e chega mais a noite começo a ter inconsistência nos dados do select.

    Um exemplo da query é:

    select produtoID from produtos where atributo = @listadeatributos

    essa lista de atributos varia entre 2 e 4000 caracteres...

    pesquisei um pouco e achei algumas possíveis soluções:

    1. sql_command.Parameters.add ("@listadeatributos",System.Data.SqlDbType.Varchar, listadeatributos.length).value = listadeatributos
    2. sql_command.Parameters.add ("@listadeatributos",System.Data.SqlDbType.Varchar, 4000).value = listadeatributos
    3. sql_command.Parameters.AddWithValue ("@listadeatributos", listadeatributos)
    4. sql_command.Parameters.add ("@listadeatributos",System.Data.SqlDbType.Varchar).value = listadeatributos

    Preciso de uma ajuda para entender qual seria a melhor opção para esse caso...

    muito obrigado...


    -- Ricardo Leka - http://leka.com.br
    domingo, 2 de janeiro de 2011 22:19

Respostas

  • Amigo, bom dia

    acredito que a melhor opção para o seu caso seja a segunda que você determina qual o tipo do parametro está passando e ainda informa o tamanho máximo do campo. Utilizar o tamanho da váriavel não é uma boa, vai que ela é maior que o valor máximo suportado.


    Olavo Oliveira Neto
    Se for útil marque como resposta e faça um Developer feliz :)
    segunda-feira, 3 de janeiro de 2011 11:54

Todas as Respostas

  • Amigo, bom dia

    acredito que a melhor opção para o seu caso seja a segunda que você determina qual o tipo do parametro está passando e ainda informa o tamanho máximo do campo. Utilizar o tamanho da váriavel não é uma boa, vai que ela é maior que o valor máximo suportado.


    Olavo Oliveira Neto
    Se for útil marque como resposta e faça um Developer feliz :)
    segunda-feira, 3 de janeiro de 2011 11:54
  • Olá Olavo,

    obrigado pela resposta.

    Mas ai tenho outra dúvida, se eu utilizar a segunda opção e houver muita requisição ele não pode sobrecarregar a memória?

     


    -- Ricardo Leka - http://leka.com.br
    segunda-feira, 3 de janeiro de 2011 12:34
  • Ricardo, bom dia.

    Você pode sobrecarregar a memória sim, mas você precisa desenvolver o seu sistema para que ele sempre de dispose nos seus objetos de acesso ao banco. Assim, você evita grande número de conexões abertas e inclusive, o grande número de objetos "perdidos" no seu servidor e isso com certeza fará com que você não tenha grandes sustos ao final do dia.

    []´s


    Fernando Orbite
    ValeLigado Consultoria
    quarta-feira, 5 de janeiro de 2011 14:13
  • Ricardo,

    uma otima opção é usar IDbDataParameter, permite voce passar:

     // Summary:

            //     Indicates the precision of numeric parameters.

            //

            // Returns:

            //     The maximum number of digits used to represent the Value property of a data

            //     provider Parameter object. The default value is 0, which indicates that a

            //     data provider sets the precision for Value.

            byte Precision { get; set; }

            //

            // Summary:

            //     Indicates the scale of numeric parameters.

            //

            // Returns:

            //     The number of decimal places to which System.Data.OleDb.OleDbParameter.Value

            //     is resolved. The default is 0.

            byte Scale { get; set; }

            //

            // Summary:

            //     The size of the parameter.

            //

            // Returns:

            //     The maximum size, in bytes, of the data within the column. The default value

            //     is inferred from the the parameter value.

            int Size { get; set; }

     

    Pesquisa sobre que implementando pode resolver seu problema

    quinta-feira, 6 de janeiro de 2011 20:15