Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida em validação de campos em C# + SQL Server Compact


Tozi

Pergunta

Estou começando a desenvolver um aplicativo em C# pela primeira vez. Estou me virando com o material da internet, mas não achei nada que fale a respeito disso.

Ao pressionar um botão, meu código lê várias textboxes e joga seus valores no meu banco de dados (Estou usando SQL Server Compact).

Porém, alguns campos no meu Banco de Dados são NOT NULL, e mesmo assim ele não da erro ao capturar uma textbox vazia. Ele captura os valores para meu banco sem reclamar. :wacko:

A parte do código é tipo isso:

comm = new SqlCeCommand("INSERT INTO cliente(nome, cpf) values(@nome, @cpf)", con);
comm.Parameters.AddWithValue("@nome", tbNomeCliente.Text);
comm.Parameters.AddWithValue("@cpf", tbCpfCliente.Text);
comm.ExecuteNonQuery();

Por exemplo, se ambas as colunas da tabela (nome e cpf) forem NOT NULL, ele não lança nenhuma exceção mesmo que não tenha nada na textbox. Pelo contrário, ele insere normalmente.

E as textboxes estão realmente vazias, não tem nem espaço em branco. Não era pra ele considerar o valor delas como NULL e lançar uma exceção?

De qualquer forma, como normalmente essa validação é feita? Pelo banco (como estou tentando fazer) ou pelo código?

Se for pelo código vai ser muito trabalhoso, pois tenho 10 campos para serem lidos, e não vou ter só um formulário de preenchimento no meu código.

É normal ter que fazer validação pra tudo no próprio código? Se sim, então qual é a vantagem de definir campos como NOT NULL no banco de dados? =P.

Desculpem o tanto de perguntas, só queria que ficasse clara a minha dúvida. Desde já agradeço. :rolleyes:

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
verifica no banco que ele deve colocar algum espaço no valor de null , você antes de tentar gravar faz um IF para validar o campo,

tipo assim

if (cpf.text != "")

Grava dados

Sim, eu pensei nisso. Mas o normal é fazerem isso? Validação pelo código? Queria saber se isso é a "padronização".

Como eu disse, isso daria um trabalhado gigantesco se fosse um programa de grande porte, e imagino que isso deve ser feito pelo bando de dados.

E no banco, eu teria que fazer todos os campos com um CHECK <condição>. Ainda sim seria um trabalho a mais.

Eu sei que tem várias maneiras de fazer isso, mas o que era pra ser "normal" (que é o que estou tentando fazer) ele não aceita.

Por isso queria saber o que faria um programador se tivesse um programa grande pra fazer isso.

Link para o comentário
Compartilhar em outros sites

  • 0

é porque o campo não está nulo você consegue validar indo no banco verificar...

quando um campo está nulo no banco fica com o "valor" "Null" ou "is NULL" algo do tipo dependendo do banco.

porem quando você usa o textBox e insere o valor dele ele não fica como nulo e sim vazio, como se tivesse apagado o valor.

essa forma que passei faz com que o programa controle outra forma e de de colocar para atribuir o valor null no load.

Uma outra forma de validar é usar o if de 2 formas, uma verificando se é nulo " if textBox.tex == null" e a outra se é vazio "if (textBox == "") "

Link para o comentário
Compartilhar em outros sites

  • 0

OK galera, mas tenho uma pergunta.

quando eu coloca o textbox.tex = ""; ele verifica se esta realmente preenchido, mas se você der um espaço não entra neste caso porque espaço é diferente de vazio, dessa forma ele cadastra no banco.

alguém tem alguma outra forma de resolver esta validação.

eu fiz conforme nosso amigo acima fez, mas quero melhorar...

Abraço.

Link para o comentário
Compartilhar em outros sites

  • 0
Boa tarde a todos;
Sou novo aqui, sou Gaúcho de São Leopoldo e estou começando a 4 meses em c# e Sql Server;
Dúvida: :wacko:
Tenho uma Tela Principal com i ListView que mostra dados de uma tabela_PrestadoresServico, quando cadastro alguém que esta entrando ela deve mostrar neste listview as informações atualizadas.
Problema: acontece que cada vez que dou um
SELECT top 10 [casa_servico], [nome_profissional], [modelo_veiculo1_profi], [placa_veiculo1_profi], [cor_veiculo1_profi], [rg_profissional], [tipo_profissional], [taxi_numero], [data_entrada], [observacoes] FROM tbl_situacao WHERE data_entrada between DATEADD(DAY, -1 , GETDATE()) AND getdate() ORDER BY casa_servico", conn);

--> ele repete todos os dados gravados no Banco na Tela. Esta replicando dados iguais na Tela ao invés de mostrar oque já tem mais as atualizações. ELE ESTA MOSTRANDO TUDO EM DOBRO E ASSIM POR DIANTE.
*** SERÁ QUE ALGUÉM PODE ME AJUDAR ???
POR FAVOR ;;;
POR DEUS ....!!!!
MARCUS - SL RS WHATSAPP: 51 93396581
Editado por Marcus Monteiro de Souza
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...