none
Cadastro sem dados RRS feed

  • Pergunta

  • Ola boa tarde a todos estou aqui novamente porque estou quebrando a cabeça pra tentar descobri como acabar com esse erro...vamos la eu acabei descobrindo por acaso eu fiz minha procedure e minha form configurei tudo certinho ate que descobri que minha form esta fazendo cadastro sem nada digitado nos campos que coloquei na form ou seja com campos vazios sendo que no sql nome usuario e senha nao aceita nulo e por incrivel que pareça ele esta salvando nulo e pelo que vi eh culpa do datetimepicker ou seila o que e peço a vcs que me ajudem a resolver isso q serei mto grato 

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Data;
    using AcessoBancoDados;
    using Negocios;
    using ObjetoTransferencia;
    
    namespace Apresentacao
    {
        public partial class Cadastro : Form
        {
    
            //carregar imagens
            string pasta_img = "";
            Image img_cancelar;     //cancelar botao normal
            Image img_cancsel;       //cancelar botao selecionado
            //====================================================================
            Image img_salvar;       //salvar botao normal
            Image img_salsel;        //salvar botao selecionado
    
            AcessoDadosSqlServer acessoDadosSqlServer = new AcessoDadosSqlServer();
    
    
    
            public Cadastro()
            {
                InitializeComponent();
                //====================================================================
                pasta_img = Application.StartupPath + @"\img\";
                //carregamento de imagens
                img_cancelar = Image.FromFile(pasta_img + "cancelar_normal.png");
                img_cancsel = Image.FromFile(pasta_img + "cancelar_selecionado.png");
                //====================================================================
                img_salvar = Image.FromFile(pasta_img + "salvar_normal.png");
                img_salsel = Image.FromFile(pasta_img + "salvar_selecionado.png");
    
            }
            private void LimparCampos()
            {
                txtbuser.Clear();
                txtbsenha.Clear();
                txtbnome.Clear();
                txtbcpf.Clear();
                txtbrg.Clear();
            }
    
            private void Cadastro_Load(object sender, EventArgs e)
            {
    
            }
            private void piccancelar_Click(object sender, EventArgs e)
            {
                this.Close();
            }
    
            private void piccancelar_MouseEnter(object sender, EventArgs e)
            {
                piccancelar.BackgroundImage = img_cancsel;
            }
    
            private void piccancelar_MouseLeave(object sender, EventArgs e)
            {
                piccancelar.BackgroundImage = img_cancelar;
            }
    
            private void picsalvar_Click(object sender, EventArgs e)
            {
                
    
                UsuarioOBJ usuarioOBJ = new UsuarioOBJ();
                usuarioOBJ.Usuario = txtbuser.Text;
                usuarioOBJ.Senha = txtbsenha.Text;
                usuarioOBJ.Nome = txtbnome.Text;
                usuarioOBJ.CPF = txtbcpf.Text;
                usuarioOBJ.RG = txtbrg.Text;
                usuarioOBJ.DataNascimento = dateTimePicker1.Value;
    
                UsuarioOBJcolecao usuarioOBJcolecao = new UsuarioOBJcolecao();
                UsuarioInserirNegocios usuarioInserirNegocios = new UsuarioInserirNegocios();
                string retorno = usuarioInserirNegocios.UsuariosInserir(usuarioOBJ);
                try
                {
                    int ID = Convert.ToInt32(retorno);
                    MessageBox.Show("CADASTRADO COM SUCESSO! ");
                    this.DialogResult = DialogResult.OK;
                    LimparCampos();
    
                }
                catch
                {
    
                    MessageBox.Show("Cadastro não efetuado. Detalhes: " + retorno, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
    
    
                }
    
            }
    
            private void picsalvar_MouseEnter(object sender, EventArgs e)
            {
                picsalvar.BackgroundImage = img_salsel;
            }
    
            private void picsalvar_MouseLeave(object sender, EventArgs e)
            {
                picsalvar.BackgroundImage = img_salvar;
            }
    
            private void txtbcpf_KeyPress(object sender, KeyPressEventArgs e)
            {
                if(!char.IsDigit(e.KeyChar))
                {
                    e.Handled = true;
                }
            }
    
            private void txtbrg_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!char.IsDigit(e.KeyChar))
                {
                    e.Handled = true;
                }
            }
    
            private void txtbuser_Validating(object sender, CancelEventArgs e)
            {
            }
            private void txtbsenha_Validating(object sender, CancelEventArgs e)
            {
            }
    
            private void txtbnome_Validating(object sender, CancelEventArgs e)
            {
            }
    
            private void txtbcpf_Validating(object sender, CancelEventArgs e)
            {
            }
    
            private void txtbrg_Validating(object sender, CancelEventArgs e)
            {
            }
    
            private void dateTimePicker1_Validating(object sender, CancelEventArgs e)
            {
            }
    
            private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
            {
    
            }
        }
    }
    
    ALTER PROCEDURE [dbo].[uspUsuarioInserir]
    	@Usuario varchar(20),
    	@Senha varchar(20),
    	@Nome varchar(50),
    	@CPF varchar(15),
    	@RG varchar(10),
    	@DataNascimento datetime
    
    AS 
    BEGIN
    	BEGIN TRY
    		BEGIN TRAN
    
    		IF(EXISTS(SELECT ID FROM tblUsuarios WHERE CPF = @CPF))
    			RAISERROR('CPF já cadastrado no banco de dados',14, 1);
    		IF(EXISTS(SELECT ID FROM tblUsuarios WHERE RG = @RG))
    			RAISERROR('RG já cadastrado no banco de dados', 14, 1);
    		IF(EXISTS(SELECT ID FROM tblUsuarios WHERE Usuario = @Usuario))
    			RAISERROR ('Usuario já cadastrado no banco de dados', 14, 1);
    
    		DECLARE @ID AS INT;
    
    		INSERT INTO tblUsuarios (Usuario,Senha,Nome,CPF,RG,DataNascimento)
    		VALUES (@Usuario,@Senha,@Nome,@CPF,@RG,@DataNascimento);
    
    		SET @ID = @@IDENTITY;
    
    		SELECT @ID AS Retorno;
    
    		COMMIT TRAN
    	END TRY
    	BEGIN CATCH
    		ROLLBACK TRAN
    		SELECT ERROR_MESSAGE() AS Retorno;
    	END CATCH
    END

    esses sao da minha form e a minha procedure e pergunto o que posso fazer para que ele pare de cadastrar em branco

    sábado, 20 de agosto de 2016 15:56

Respostas

  • Olá Amigo,

    Quando você executa o código:

                UsuarioOBJ usuarioOBJ = new UsuarioOBJ();
                usuarioOBJ.Usuario = txtbuser.Text;
                usuarioOBJ.Senha = txtbsenha.Text;
                usuarioOBJ.Nome = txtbnome.Text;
                usuarioOBJ.CPF = txtbcpf.Text;
                usuarioOBJ.RG = txtbrg.Text;
                usuarioOBJ.DataNascimento = dateTimePicker1.Value;

    Você está atribuindo um valor VAZIO (String.Empty ou "") ao objeto caso o textbox esteja sem nenhum texto preenchido.

    VAZIO é diferente de NULO. Caso você passo o valor VAZIO (""), o campo NOT NULL irá aceitar, pois você está inserindo uma informação, que é o VAZIO ("").

    Para que você não tenha esse problema, você pode fazer, no seu código em ADO, o seguinte:

            public void InserirUsuarioSistema(UsuarioSistema usuarioSistema)
            {
                using (SqlConnection conn = new SqlConnection("connectionString"))
                {
                    using (SqlCommand cmd = new SqlCommand("uspUsuarioInserir", conn))
                    {
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;
                        cmd.Parameters.AddWithValue("Usuario", usuarioSistema.Usuario != null ? (object) usuarioSistema.Usuario : DBNull.Value);
                        cmd.Parameters.AddWithValue("Senha", usuarioSistema.Senha!= null ? (object)usuarioSistema.Senha: DBNull.Value);
    
                        //Resto do código aqui
                    }
                }
            }


    Caso você esteja utilizando o C# 6.0 ou superior, você pode substituir o trecho

                        cmd.Parameters.AddWithValue("Usuario", usuarioSistema.Usuario != null ? (object) usuarioSistema.Usuario : DBNull.Value);
                        cmd.Parameters.AddWithValue("Senha", usuarioSistema.Usuario != null ? (object)usuarioSistema.Usuario : DBNull.Value);

    Por:

                        cmd.Parameters.AddWithValue("Usuario", (object) usuarioSistema.Usuario ?? DBNull.Value);
                        cmd.Parameters.AddWithValue("Senha", (object)usuarioSistema.Senha ?? DBNull.Value);

    Caso tenha lhe ajudado e sido a solução do seu problema, não esqueça de marcar como resposta


    quarta-feira, 24 de agosto de 2016 19:42

Todas as Respostas

  • Sua procedure parece estar certa, tente fazer um cadastro direto no management do sql, acredito que seu problema esta no código, acho que seu dados não estão indo para a procedure

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br

    sábado, 20 de agosto de 2016 19:28
  • Sua procedure parece estar certa, tente fazer um cadastro direto no management do sql, acredito que seu problema esta no código, acho que seu dados não estão indo para a procedure

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br

    ate mesmo pelo sql ta fazendo cadastro em branco

    @edit---------------------------------------------------------

    		IF COALESCE(PATINDEX('%[^ ]%', @Usuario), 0) > 0
    			RAISERROR('Por favor preencha o campo de usuario corretamente');
    
    		IF COALESCE(PATINDEX('%[^ ]%', @Senha), 0) > 0
    			RAISERROR('Por favor preencha o campo de senha corretamente');
    
    		IF COALESCE(PATINDEX('%[^ ]%', @Nome), 0) > 0
    			RAISERROR('Por favor preencha o campo de nome corretamente');
    lembrei desse codigo porem nao lembrei corretamente eu esqueci de alguma coisa que nao estou conseguindo lembra se puder me dizer o que esta faltando nesse codigo ai que acredito que com esse codigo para de fazer cadastro em branco

    • Editado Dunki segunda-feira, 22 de agosto de 2016 17:45
    segunda-feira, 22 de agosto de 2016 13:43
  • Tente rodar sem o RaisError pra ver se passa ?

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br

    segunda-feira, 22 de agosto de 2016 17:58
  • Tente rodar sem o RaisError pra ver se passa ?

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br

    ele passa porem ainda cadastra em branco 
    segunda-feira, 22 de agosto de 2016 22:26
  • Precisaria olhar a estrutura do banco pra tentar rodar e entender, em algum lugar tem erro e precisa debugar  

    Se a resposta contribuiu com seu aprendizado por favor marque como Útil
    Se solucionou seu problema por favor marque como Resposta
    Atenção, se seu problema foi resolvido não deixe o post aberto 

    Visite : www.codigoexpresso.com.br

    terça-feira, 23 de agosto de 2016 04:04
  • Olá Amigo,

    Quando você executa o código:

                UsuarioOBJ usuarioOBJ = new UsuarioOBJ();
                usuarioOBJ.Usuario = txtbuser.Text;
                usuarioOBJ.Senha = txtbsenha.Text;
                usuarioOBJ.Nome = txtbnome.Text;
                usuarioOBJ.CPF = txtbcpf.Text;
                usuarioOBJ.RG = txtbrg.Text;
                usuarioOBJ.DataNascimento = dateTimePicker1.Value;

    Você está atribuindo um valor VAZIO (String.Empty ou "") ao objeto caso o textbox esteja sem nenhum texto preenchido.

    VAZIO é diferente de NULO. Caso você passo o valor VAZIO (""), o campo NOT NULL irá aceitar, pois você está inserindo uma informação, que é o VAZIO ("").

    Para que você não tenha esse problema, você pode fazer, no seu código em ADO, o seguinte:

            public void InserirUsuarioSistema(UsuarioSistema usuarioSistema)
            {
                using (SqlConnection conn = new SqlConnection("connectionString"))
                {
                    using (SqlCommand cmd = new SqlCommand("uspUsuarioInserir", conn))
                    {
                        cmd.CommandType = System.Data.CommandType.StoredProcedure;
                        cmd.Parameters.AddWithValue("Usuario", usuarioSistema.Usuario != null ? (object) usuarioSistema.Usuario : DBNull.Value);
                        cmd.Parameters.AddWithValue("Senha", usuarioSistema.Senha!= null ? (object)usuarioSistema.Senha: DBNull.Value);
    
                        //Resto do código aqui
                    }
                }
            }


    Caso você esteja utilizando o C# 6.0 ou superior, você pode substituir o trecho

                        cmd.Parameters.AddWithValue("Usuario", usuarioSistema.Usuario != null ? (object) usuarioSistema.Usuario : DBNull.Value);
                        cmd.Parameters.AddWithValue("Senha", usuarioSistema.Usuario != null ? (object)usuarioSistema.Usuario : DBNull.Value);

    Por:

                        cmd.Parameters.AddWithValue("Usuario", (object) usuarioSistema.Usuario ?? DBNull.Value);
                        cmd.Parameters.AddWithValue("Senha", (object)usuarioSistema.Senha ?? DBNull.Value);

    Caso tenha lhe ajudado e sido a solução do seu problema, não esqueça de marcar como resposta


    quarta-feira, 24 de agosto de 2016 19:42