Usuário com melhor resposta
problema ao salvar no banco com campos que tem mascara cpf, cnpj

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.
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 deixarsomente 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.
- Marcado como Resposta Thales F Quintas sexta-feira, 27 de maio de 2016 12:15
-
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
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.
-
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.
-
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 deixarsomente 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.
- Marcado como Resposta Thales F Quintas sexta-feira, 27 de maio de 2016 12:15
-
-
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
-
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.
-
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.
-
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.