none
problema ao salvar no banco com campos que tem mascara cpf, cnpj RRS feed

  • Pergunta

  • Essa é minha tela de selecionar cliente para inserir ou alterar. Quando em vou inserir e salvo no banco os campos CEP, CPF e CNPJ não grava tudo no banco, o Cep fica faltando o ultimo digito e no Cpf e CNPJ também fica faltando alguns dígitos, na tabela eu deixei o tamanho do campo suficiente para armazenar todos os dígitos. Veja como esta a propriedade mask de cada maskBox. Cep: 00000-000 Cpf: 000,000,000-00 CNPJ: 00,000,000/000-00 . A mascara que coloquei para os telefones funcionou direitinho salvar perfeito. No banco eu deixei os campos do tipo varchar(50). Abaixo minha tela de cadastro de cliente

    esse é o código do botão salvar:

    privatevoidbntSalvar_Click(objectsender, EventArgse)

    {

    //Inseri dados no banco.

    if(acaoNaTelaSelecionada == AcaoNaTela.Inserir)

    {

    Clientecliente = newCliente();

    cliente.DataCadastro = dateDataCadastro.Value;

    cliente.DataNascimento = dateDataNascimento.Value;

    cliente.Nome = txtNome.Text;

    if(rdbFisica.Checked == true)

    cliente.Tipo = true;

    else

    cliente.Tipo = false;

    if(rdbAtivo.Checked == true)

    cliente.Ativo = true;

    else

    cliente.Ativo = false;

    cliente.Apelido = txtApelido.Text;

    cliente.Endereco = txtEndereco.Text;

    cliente.Bairro = txtBairro.Text;

    cliente.Complemento = txtComplemento.Text;

    cliente.Cep = MskCep.Text;

    cliente.Cpf = MskCpf.Text;

    cliente.Rg = txtRg.Text;

    cliente.Cidade = txtCidade.Text;

    cliente.Estado = cbxEstado.Text;

    cliente.Cnpj = MskCnpj.Text;

    cliente.Ie = txtEscricaoEstadual.Text;

    cliente.Fone = mskFone.Text;

    cliente.Celular1 = MskCelular1.Text;

    cliente.Celular2 = MskCelular2.Text;

    cliente.Email = txtEmail.Text;

    cliente.Obs = txtObservacao.Text;

    ClienteNegociosclienteNegocios = newClienteNegocios();

    stringretorno = clienteNegocios.Inserir(cliente);

    try

    {

    intidCliente = Convert.ToInt32(retorno);

    MessageBox.Show("Cliente inserido com sucesso. Código: "+ idCliente.ToString());

    this.DialogResult = DialogResult.Yes;

    }

    catch

    {

    MessageBox.Show("Não foi possivel inserir o cliente. Detalhe: "+ retorno, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);

    this.DialogResult = DialogResult.No;

    }

    }

    //Alterar os dados no banco.

    elseif(acaoNaTelaSelecionada == AcaoNaTela.Alterar)

    {

    Clientecliente = newCliente();

    cliente.IdCliente = Convert.ToInt32(txtCodigo.Text);

    cliente.DataCadastro = dateDataCadastro.Value;

    cliente.DataNascimento = dateDataNascimento.Value;

    cliente.Nome = txtNome.Text;

    if(rdbFisica.Checked == true)

    cliente.Tipo = true;

    else

    cliente.Tipo = false;

    if(rdbAtivo.Checked == true)

    cliente.Ativo = true;

    else

    cliente.Ativo = false;

    cliente.Apelido = txtApelido.Text;

    cliente.Endereco = txtEndereco.Text;

    cliente.Bairro = txtBairro.Text;

    cliente.Complemento = txtComplemento.Text;

    cliente.Cep = MskCep.Text;

    cliente.Cpf = MskCpf.Text;

    cliente.Rg = txtRg.Text;

    cliente.Cidade = txtCidade.Text;

    cliente.Estado = cbxEstado.Text;

    cliente.Cnpj = MskCnpj.Text;

    cliente.Ie = txtEscricaoEstadual.Text;

    cliente.Fone = mskFone.Text;

    cliente.Celular1 = MskCelular1.Text;

    cliente.Celular2 = MskCelular2.Text;

    cliente.Email = txtEmail.Text;

    cliente.Obs = txtObservacao.Text;

    ClienteNegociosclienteNegocios = newClienteNegocios();

    stringretorno = clienteNegocios.Alterar(cliente);

    try

    {

    intidCliente = Convert.ToInt32(retorno);

    MessageBox.Show("Cliente alterado com sucesso. Código: "+ idCliente.ToString());

    this.DialogResult = DialogResult.Yes;

    }

    catch

    {

    MessageBox.Show("Não foi possivel alterar o cliente. Detalhe: "+ retorno, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);

    this.DialogResult = DialogResult.No;

    }

    }

    Mais uma vez obrigado pela atenção, sou iniciantes em c# e com um projeto meio complexo nas mãos esta sem um desafio mais eu não desisto, obrigado mais uma meus irmãos.

    quinta-feira, 26 de maio de 2016 18:04

Respostas

  • Oi, Amigo. 

    Ali esta somente um exemplo. de como remover a mascara e posteriormente incluir a mascara novamente. 

    Quem sou eu pra dizer como vc deve projetar seu software, rs. dei somente uma sugestão, caso vc vá deixar os campos do banco como varchar, revise somente a qtd, exemplo pro Cep vc não vai precisar de um varchar (11) se um varchar(8) ja resolve a questão. apesar de vc economizar espaço usando um int, isso caso vc trabalhe assim ex:

    Forma que vc esta trabalhando HJ.

    cliente.Cep = MskCep.Text;

    cliente.Cpf = MskCpf.Text;

    Sugestão:

    maskedTextBox1.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals; // tira a formatação
    string cep1 = maskedTextBox1.Text; //texto não formatado
    maskedTextBox1.TextMaskFormat = MaskFormat.IncludePromptAndLiterals;

    cliente.Cep = convert.toint32(cep1);

    aonde 

    maskedTextBox1 é o mask do cep

    vc vai usar o nome do mask .TextMaskFormat = MaskFormat.ExcludePromptAndLiterals; para deixar

    somente o texto ai vc joga numa variavel qualquer e volta com a mascara.

    Entendeu.

    Um abraço.

    Wsti.

    qq duvida posta ai que tentamos te ajudar, o forum esta ai pra isso, compartilhar conhecimento.

    sexta-feira, 27 de maio de 2016 02:46
  • Fala amigo, vc entendeu o exemplo? 

    o que cada comando faz, se sim não tem como não funcionar. 

    Faz assim que eu acho que vc vai entender melhor

    coloca um break point em MskCpf e em string teste. 

    teu MskCpf fica assim 098.123.234-01

    quando vc passa ele no exclude, os dados ficam assim: 09812323401

    na verdade, vc só recebe os números sem mascara.

    privatevoidbntSalvar_Click(objectsender, EventArgse)

    {

    string teste = MskCpf.text;

    MskCpf.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals; // tira a formatação string cfp1 = MskCpf.Text; //texto não formatado
    MskCpf.TextMaskFormat = MaskFormat.IncludePromptAndLiterals;

    não tem como não funcionar, a não ser que na sua proc a qtd esteja errada, vc ja verificou isso ? 

    Att, Wsti.

    • Marcado como Resposta Edlenilson sábado, 28 de maio de 2016 23:27
    sábado, 28 de maio de 2016 03:24

Todas as Respostas

  • Amigo, um conselho não use varchar pra tudo, pois um dia vc ira descobrir o quanto de espaço no banco vc esta desperdiçando. Falado isso, vc pode remover o mask e gravar somente os dados.

    Assim:

    maskedTextBox1.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals; // tira a formatação
    label1.Text = maskedTextBox1.Text; //texto não formatado
    maskedTextBox1.TextMaskFormat = MaskFormat.IncludePromptAndLiterals; // retorna a formataçã

    Att, Wsti.

    quinta-feira, 26 de maio de 2016 21:19
  • Irmão obrigado pela atenção. Desculpa a inexperiência mais essas linha eu vou colocar no próprio maskbox ou no meu botão salvar? o objeto cliente eu instancio da minha camada objeto de transferência. outra la no banco eu coloco text no lugar de varcha. Mais uma vez obrigado irmão.
    sexta-feira, 27 de maio de 2016 01:47
  • Oi, Amigo. 

    Ali esta somente um exemplo. de como remover a mascara e posteriormente incluir a mascara novamente. 

    Quem sou eu pra dizer como vc deve projetar seu software, rs. dei somente uma sugestão, caso vc vá deixar os campos do banco como varchar, revise somente a qtd, exemplo pro Cep vc não vai precisar de um varchar (11) se um varchar(8) ja resolve a questão. apesar de vc economizar espaço usando um int, isso caso vc trabalhe assim ex:

    Forma que vc esta trabalhando HJ.

    cliente.Cep = MskCep.Text;

    cliente.Cpf = MskCpf.Text;

    Sugestão:

    maskedTextBox1.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals; // tira a formatação
    string cep1 = maskedTextBox1.Text; //texto não formatado
    maskedTextBox1.TextMaskFormat = MaskFormat.IncludePromptAndLiterals;

    cliente.Cep = convert.toint32(cep1);

    aonde 

    maskedTextBox1 é o mask do cep

    vc vai usar o nome do mask .TextMaskFormat = MaskFormat.ExcludePromptAndLiterals; para deixar

    somente o texto ai vc joga numa variavel qualquer e volta com a mascara.

    Entendeu.

    Um abraço.

    Wsti.

    qq duvida posta ai que tentamos te ajudar, o forum esta ai pra isso, compartilhar conhecimento.

    sexta-feira, 27 de maio de 2016 02:46
  • Irmão desculpa mais não consegui colocar em pratica o código que vc postou?

    sábado, 28 de maio de 2016 02:59
  • Fala amigo, vc entendeu o exemplo? 

    o que cada comando faz, se sim não tem como não funcionar. 

    Faz assim que eu acho que vc vai entender melhor

    coloca um break point em MskCpf e em string teste. 

    teu MskCpf fica assim 098.123.234-01

    quando vc passa ele no exclude, os dados ficam assim: 09812323401

    na verdade, vc só recebe os números sem mascara.

    privatevoidbntSalvar_Click(objectsender, EventArgse)

    {

    string teste = MskCpf.text;

    MskCpf.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals; // tira a formatação string cfp1 = MskCpf.Text; //texto não formatado
    MskCpf.TextMaskFormat = MaskFormat.IncludePromptAndLiterals;

    não tem como não funcionar, a não ser que na sua proc a qtd esteja errada, vc ja verificou isso ? 

    Att, Wsti.

    • Marcado como Resposta Edlenilson sábado, 28 de maio de 2016 23:27
    sábado, 28 de maio de 2016 03:24
  • ficou mais claro vou tentar obrigado irmão pela atenção e paciência. O rapaz que criou o banco mim passou a pro. veja:

    ALTERPROCEDURE[dbo].[uspClienteInserir]

    @DataCadastro datetime,

    @DataNascimento datetime,

    @Ativo bit,

    @Nome varchar(100),

    @Apelido varchar(50),

    @Endereco varchar(100),

    @Bairro varchar(50),

    @Complemento varchar(50),

    @Cidade varchar(50),

    @Estado varchar(2),

    @Cep varchar(8),

    @Tipo bit,

    @Cpf varchar(11),

    @Rg varchar(20),

    @Cnpj varchar(14),

    @Ie varchar(20),

    @Fone varchar(20),

    @Celular1 varchar(20),

    @Celular2 varchar(20),

    @Email varchar(20),

    @Obs varchar(2000)

     

    AS

    BEGIN

    INSERTINTOtblCliente

    (

    DataCadastro,

    DataNascimento,

    Ativo,

    Nome,

    Apelido,

    Endereco,

    Bairro,

    Complemento,

    Cidade,

    Estado,

    Cep,

    Tipo,

    Cpf,

    Rg,

    Cnpj,

    Ie,

    Fone,

    Celular1,

    Celular2,

    Email,

    Obs

    )

    VALUES

    (

    @DataCadastro,

    @DataNascimento,

    @Ativo,

    @Nome,

    @Apelido,

    @Endereco,

    @Bairro,

    @Complemento,

    @Cidade,

    @Estado,

    @Cep,

    @Tipo,

    @Cpf,

    @Rg,

    @Cnpj,

    @Ie,

    @Fone,

    @Celular1,

    @Celular2,

    @Email,

    @Obs

    )

    SELECT@@IDENTITYASRetorno

    END

    obrigado.

    sábado, 28 de maio de 2016 03:42
  • Que isso amigo, como ja disse, estamos aqui um pra ajudar o outro. o objetivo é esse.

    Repare que o campo cep esta como varchar(8), então seguindo a logica com a mascara vai ficar 32.876-090 então, como o campo só tem 8 ele só vai receber 32.876-0. vc vai ter que verificar os campos. pra ver se realmente esta correta a qtd de caracteres. depois faz da forma que eu exemplifiquei pra vc.

    Att, Wsti.

    sábado, 28 de maio de 2016 12:55
  • Irmão deu certo obrigado pela ajuda. Eu sempre gosto de ouvir os mais experiente então só mais uma coisa a sua opinião sobre esses campos que colocamos varchar teria algum que vc não colocaria varchar. exemplo o campo Obs colocamos (2000), na sua opinião como seria? E agente encera  e mais uma vez obrigado.
    sábado, 28 de maio de 2016 23:27