none
Formatar dados string antes de salvar RRS feed

  • Pergunta

  • Eu tenho dentro do meu SQLDataSource o comando abaixo para salvar os dados do meu Formview:

    UpdateCommand="UPDATE [COLABORADORES] SET [CHAPA] = upper(@CHAPA), [NOME] = upper(@NOME), [FUNCAO] = upper(@FUNCAO), WHERE (([CODIGO] = @CODIGO))">

    Observe que todos os campos eu salvo em maiusculo com o comando upper.

    O que eu preciso agora e que no campo CHAPA que so aceita numeros ele acrescente os 0:

    Exemplo se o usuario digitar 2345 o 002345:

    Lembrando que o campo é um varchar de 6 digitos.

    Alguem pode me ajudar ?

    Obrigado.

    terça-feira, 2 de julho de 2013 19:53

Respostas

  • Paulo, fica dessa forma: 

    InsertCommand = "INSERT INTO [COLABORADORES] ([CHAPA],[NOME], [FUNCAO]) VALUES (upper(right('000000' + convert(varchar(6), @CHAPA), 6)) , upper(@NOME), upper(@FUNCAO))"

    Se a resposta for útil, não esqueça de marcar como resposta ;) 

    Abraço

    • Sugerido como Resposta Alexandre Rapaki quinta-feira, 4 de julho de 2013 20:14
    • Marcado como Resposta ricardoti2012 sexta-feira, 5 de julho de 2013 11:08
    quinta-feira, 4 de julho de 2013 20:14

Todas as Respostas

  • Boa Noite Paulo_Ti

    Ser você estiver utilizando o SQL Server 2012 ele tem a função concat o código ficaria assim:

     UpdateCommand="UPDATE [COLABORADORES] SET [CHAPA] = upper(CONCAT('00',@CHAPA)), [NOME] = upper(@NOME), [FUNCAO] = upper(@FUNCAO), WHERE (([CODIGO] = @CODIGO))">

    ser não

    você poder usar o  simbolo '+' para concatenar ficaria assim:


    UpdateCommand="UPDATE [COLABORADORES] SET [CHAPA] = upper('00' + @CHAPA), [NOME] = upper(@NOME), [FUNCAO] = upper(@FUNCAO), WHERE (([CODIGO] = @CODIGO))">

    Espero te ajuda !

    terça-feira, 2 de julho de 2013 23:07
  • vc pode criar uma variável tipo string usa o comando padleft e depois converte essa variável para inteiro.

    Junior

    quarta-feira, 3 de julho de 2013 11:03
  • Zero SamaEu estou usando o SQL 2008 e meu codigo esta no meu SqlDataSource do meu FormView.

    O que vc postou pode ajudar no caso do usuario colocar 4 digitos no campo chapa.

    Porem esse campo o usuario pode colocar 1 ou 22 ou 333 ou 4444 ou 55555

    E quando ele colocar da forma acima deve gravar no banco de dados assim 000001 ou 000022 ou 000333 ou 004444 ou 055555

    Entendeu ?

    Espero que me ajude.

    Fico no aguardo.

    Obrigado

    quarta-feira, 3 de julho de 2013 11:13
  • Olá Paulo,

    Neste caso você precisa tratar o valor antes de passar ele como parâmetro. Você pode usar o método PadLeft e completar a String com zeros a esquerda.

    String chapa = "123".PadLeft(6, '0');

    Dessa forma, quando você passar o valor da variável chapa para o seu parâmetro ele estará no formato que tu precisa.


    Se for útil, não esqueça de marcar ;)

    • Sugerido como Resposta Alexandre Rapaki quarta-feira, 3 de julho de 2013 14:52
    quarta-feira, 3 de julho de 2013 14:51
  • Alexandre

    Eu não entendi o 123 no comando.

    A chapa e um textBoxChapa.Text

    Não tem como tratar direto no SqlDataSource ?

    Fico no aguardo.

    Obrigado.

    quarta-feira, 3 de julho de 2013 20:17
  • Paulo,

    Neste caso o mais fácil é passar o valor já formatado para o comando. Usei o 123 apenas para exemplo, podes fazer dessa forma também:

    String chapa = textBoxChapa.Text.PadLeft(6, '0');


    E então quando você passar a variável chapa para o seu parâmetro ele estará no formato que você precisa.



    Se tu quiser formatar usando um comando SQL, pode fazer dessa forma:

    UpdateCommand="UPDATE [COLABORADORES] SET [CHAPA] = upper(right('000000' + convert(varchar(6), @CHAPA), 6)), [NOME] = upper(@NOME), [FUNCAO] = upper(@FUNCAO), WHERE (([CODIGO] = @CODIGO))"


    Se for útil, não esqueça de marcar como resposta ;)

    quarta-feira, 3 de julho de 2013 20:42
  • Paulo,

    Como você mesmo disse, o seu campo "Chapa" só aceita números, porem você não disse qual é o tipo dele. Caso ele seja do tipo "int" ou qualquer outro tipo que derive, isso que você pretende fazer não sera possível, pois o SQL descarta zero a esquerda:

    DECLARE @TABELA TABLE
    (
    	Id INT
    )
    
    INSERT INTO @TABELA (Id) VALUES (000001)
    
    SELECT * FROM @TABELA

    Talvez você consiga interceptar os valores que serão atualizados usando do evento "OnUpdating", porem não sei se é possível:

    http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.updating.aspx

    Que tal tratar isso apenas na exibição ?

    Vitor Mendes | http://www.vitormendes.com.br/

    "Ajuda teu semelhante a levantar a sua carga, porém, não a carregá-la." (Pitágoras)

    quinta-feira, 4 de julho de 2013 17:23
  • Alexandre

    O Comando funcionou perfeitamente para alterar o registro, mas eu preciso tambem inserir no Insert para adiconar registros.
    Como fica então a conversão de acordo com o codigo que tenho abaixo:

    InsertCommand="INSERT INTO [COLABORADORES] ([CHAPA],[NOME], [FUNCAO]) VALUES (upper(@CHAPA), upper(@NOME), upper(@FUNCAO))"

    quinta-feira, 4 de julho de 2013 20:01
  • Alexandre

    O Comando funcionou perfeitamente para alterar o registro, mas eu preciso tambem inserir no Insert para adiconar registros.
    Como fica então a conversão de acordo com o codigo que tenho abaixo:

    InsertCommand="INSERT INTO [COLABORADORES] ([CHAPA],[NOME], [FUNCAO]) VALUES (upper(@CHAPA), upper(@NOME), upper(@FUNCAO))"

    quinta-feira, 4 de julho de 2013 20:02
  • Use da mesma técnica postada pelo Alexandre:

    InsertCommand = "INSERT INTO [COLABORADORES] ([CHAPA],[NOME], [FUNCAO]) VALUES (upper(right('000000' + convert(varchar(6), @CHAPA), 6)) , upper(@NOME), upper(@FUNCAO))"


    Vitor Mendes | http://www.vitormendes.com.br/

    "Ajuda teu semelhante a levantar a sua carga, porém, não a carregá-la." (Pitágoras)

    quinta-feira, 4 de julho de 2013 20:08
  • Paulo, fica dessa forma: 

    InsertCommand = "INSERT INTO [COLABORADORES] ([CHAPA],[NOME], [FUNCAO]) VALUES (upper(right('000000' + convert(varchar(6), @CHAPA), 6)) , upper(@NOME), upper(@FUNCAO))"

    Se a resposta for útil, não esqueça de marcar como resposta ;) 

    Abraço

    • Sugerido como Resposta Alexandre Rapaki quinta-feira, 4 de julho de 2013 20:14
    • Marcado como Resposta ricardoti2012 sexta-feira, 5 de julho de 2013 11:08
    quinta-feira, 4 de julho de 2013 20:14
  • Obrigado Alexandre

    Ja Marquei como resposta.

    Valew

    sexta-feira, 5 de julho de 2013 11:09