none
Sistema em C# - Windows Form- aceitar a inclusão de campo data vazio RRS feed

  • Pergunta


  • Bom dia, tenho a estrutura de cóigo abaixo,como faço para que eu consiga incluir uma
    data vazia, no caso a dataPagto?
    Dá erro e ele não inclu quando deixo de informar a data?
    No banco o campo dataPagto está formatado para aceitar null
    Sou iniciante e c# e estou quebrando a cabeça para conseguir fazer isto, se alguém puder
    me exemplificar com os códigos (e/ou métodos)

     

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;

    namespace Controle_De_Gastos
    {
        public partial class principal : Form
        {
            SqlConnection conexao;
            SqlCommand comando;
            SqlDataAdapter captura;
            DataTable tabDespesa;
            public principal()
            {
                InitializeComponent();
            }
           
            public void conectaBanco()
            {
                conexao = new SqlConnection(@"server=.\sqlexpress;Database = xx; Integrated Security = xxx");
                conexao.Open();
            }

            public DataTable mostraRegistros()
            {
                captura = new SqlDataAdapter(comando);
                tabDespesa = new DataTable();
                captura.Fill(tabDespesa);
                return (tabDespesa);
            }
           
            public void fechaConexao()
            {
                conexao.Close();
            }


            public void consulta()
            {
                comando = new SqlCommand("select d.codDespesa,c.codConta, c.nomeConta,d.dataVcto,d.dataPagto,d.valor,s.codSituacao,s.nomeSituacao from despesa d join conta c on d.codconta = c.codconta join situacao s  on d.codSituacao = s.codSituacao where c.codConta = 1  order by dataVcto ", conexao);
                dgvGastos.DataSource = mostraRegistros();
            }

            public void consultaCondominio()
            {
                comando = new SqlCommand("select d.codDespesa,c.codConta, c.nomeConta,d.dataVcto,d.dataPagto,d.valor,s.codSituacao,s.nomeSituacao from despesa d join conta c on d.codconta = c.codconta join situacao s  on d.codSituacao = s.codSituacao where c.codConta = 2  order by dataVcto ", conexao);
                dgvGastos.DataSource = mostraRegistros();
            }

            public String RetornaValorParaBD(decimal valor)
            {
                //faz-se aqui os tratamentos de decimal
                return valor.ToString("0.00").Replace(".", "").Replace(",", ".");
            }

            private bool IsDate(String DateToValid)
            {
                DateTime Date;
                return DateTime.TryParse(DateToValid, out Date);
            }
           
                   
            public void incluirGasto(int codConta, string valor, DateTime dataVcto, DateTime dataPagto, int codSituacao )
            {
                comando.CommandText = "INSERT INTO despesa (codConta,valor,dataVcto,dataPagto, codSituacao)VALUES ('" + codConta + "', '" + valor + "','" + dataVcto.ToString("yyyyMMdd") + "', '" + dataPagto.ToString("yyyyMMdd") + "', '" + codSituacao + "')";
                comando.ExecuteNonQuery();
            }

            public void alterarGastos(int codDespesa, int codConta, string valor, DateTime dataVcto, DateTime dataPagto, int codSituacao)
            {
                comando.CommandText = "UPDATE despesa SET codConta = '" + codConta + "',valor= '" + valor + "',dataVcto='" + dataVcto.ToString("yyyyMMdd") + "', dataPagto='" + dataPagto.ToString("yyyyMMdd") + "',codSituacao= '" + codSituacao + "'WHERE codDespesa=" + codDespesa;
                comando.ExecuteNonQuery();
            }

                    
                                
            private void principal_Load(object sender, EventArgs e)
            {
                try
                {
                    conectaBanco();
                    consulta();
                    dgvGastos.DataSource = tabDespesa;

                }
                catch (Exception erro)
                {
                    MessageBox.Show("Erro\n" + erro.Message, "Controle de Gastos");
                }
            }

            private void btnGravar_Click(object sender, EventArgs e)
            {
                try
                {
                   
                    if (txtValor.Text !="" && mskVcto.Text !="" || mskPagto.Text!="")
                    {
                        conectaBanco();
                        consulta();
                        incluirGasto(int.Parse(cbDespesa.SelectedValue.ToString()), RetornaValorParaBD(Convert.ToDecimal(txtValor.Text)), DateTime.Parse(mskVcto.Text), DateTime.Parse(mskPagto.Text), int.Parse(cbSituacao.SelectedValue.ToString()));
                        MessageBox.Show("Gasto incluído com Sucesso", "Controle de Gastos");
                        consulta();
                        txtValor.Clear();
                        mskVcto.Clear();
                        mskPagto.Clear();
                                           
                    }

                    else
                    {
                        MessageBox.Show("Para incluir uma despesa é necessário no mínimo o Tipo, o Valor e o Vencimento da mesma!!! ", "Controle de Gastos");

                    }
                                   
                }

                catch (Exception erro)
                {
                    MessageBox.Show("Erro\n" + erro.Message, "Controle de Gastos");
                }
            }

            private void btnIncluir_Click(object sender, EventArgs e)
            {
                txtValor.Clear();
                mskVcto.Clear();
                mskPagto.Clear();
                txtCodigo.Clear();
                MessageBox.Show("Digite os dados, para gravar pressione o botão: Gravar Dados", "Controle de Gastos");
            }

          
            private void btnAlterar_Click(object sender, EventArgs e)
            {
                try
                {
                    conectaBanco();
                    consulta();
                    if (MessageBox.Show("Deseja alterar?", "Atenção", MessageBoxButtons.YesNo) == DialogResult.No)
                        return;
                    else
                    {
                        alterarGastos(int.Parse(txtCodigo.Text), int.Parse(cbDespesa.SelectedValue.ToString()), RetornaValorParaBD(Convert.ToDecimal(txtValor.Text)), DateTime.Parse(mskVcto.Text), DateTime.Parse(mskPagto.Text), int.Parse(cbSituacao.SelectedValue.ToString()));
                        MessageBox.Show("Gasto alterado com Sucesso", "Controle de Gastos");
                        consulta();
                    }

                }
                catch (Exception erro)
                {
                    MessageBox.Show("Erro\n" + erro.Message, "Controle de Gastos");
                }

    sexta-feira, 8 de fevereiro de 2013 11:08

Respostas

  • Acabei de descobrir o erro

    marquei em negrito e sublinhado abaixo

    private void btnGravar_Click(object sender, EventArgs e) { DateTime? DateVcto; // esta variável tem que declarar no início do código DateTime? DatePgto; // esta variável tem que declrara no inicio do codigo try { if (txtValor.Text !="" && mskVcto.Text !="" || mskPagto.Text!="") { if( IsDate( mskVcto.Text )) { DateVcto = DateTime.Parse( MskVcto.Text ); } if( IsDate( mskPagto.Text )) { DatePgto = DateTime.Parse( mskPagto.Text ); } conectaBanco(); consulta(); incluirGasto(int.Parse(cbDespesa.SelectedValue.ToString()), RetornaValorParaBD(Convert.ToDecimal(txtValor.Text)), DateVcto, DatePgto, int.Parse(cbSituacao.SelectedValue.ToString())); MessageBox.Show("Gasto incluído com Sucesso", "Controle de Gastos"); consulta(); txtValor.Clear(); mskVcto.Clear(); mskPagto.Clear(); } else { MessageBox.Show("Para incluir uma despesa é necessário no mínimo o Tipo, o Valor e o Vencimento da mesma!!! ", "Controle de Gastos"); } } catch (Exception erro) { MessageBox.Show("Erro\n" + erro.Message, "Controle de Gastos"); } } public void incluirGasto(int codConta, string valor, DateTime? dataVcto, DateTime? dataPagto, int codSituacao ) { String DateVcto = "NULL"; String DatePagto = "NULL"; if( dataVcto.HasValue ) { DateVcto = "'" + dataVcto.ToString("yyyyMMdd") + "'"; // sai fora

    } if( dataPagto.HasValue ) { DatePagto = "'" + dataPagto.ToString("yyyyMMdd") + "'"; // sai fora } comando.CommandText = "INSERT INTO despesa (codConta,valor,dataVcto,dataPagto, codSituacao)VALUES ('" + codConta + "', '" + valor + "'," + DateVcto + ", " + DatePagto + ", '" + codSituacao + "')"; comando.ExecuteNonQuery(); }

    • Marcado como Resposta DilsonDG sexta-feira, 8 de fevereiro de 2013 22:50
    sexta-feira, 8 de fevereiro de 2013 22:50

Todas as Respostas

  • Substitua os 2 métodos:

    private void btnGravar_Click(object sender, EventArgs e)
    {
    	DateTime? DateVcto;
    	DateTime? DatePgto;
    	try
    	{
    		
    		if (txtValor.Text !="" && mskVcto.Text !="" || mskPagto.Text!="")
    		{
    		
    			if( IsDate( mskVcto.Text ))
    			{
    				DateVcto = DateTime.Parse( MskVcto.Text );
    			}
    		
    			if( IsDate( mskPagto.Text ))
    			{
    				DatePgto = DateTime.Parse( mskPagto.Text );
    			}
    		
    			conectaBanco();
    			consulta();
    			incluirGasto(int.Parse(cbDespesa.SelectedValue.ToString()), RetornaValorParaBD(Convert.ToDecimal(txtValor.Text)), DateVcto, DatePgto, int.Parse(cbSituacao.SelectedValue.ToString()));
    			MessageBox.Show("Gasto incluído com Sucesso", "Controle de Gastos");
    			consulta();
    			txtValor.Clear();
    			mskVcto.Clear();
    			mskPagto.Clear();
    								
    		}
    
    		else
    		{
    			MessageBox.Show("Para incluir uma despesa é necessário no mínimo o Tipo, o Valor e o Vencimento da mesma!!! ", "Controle de Gastos");
    
    		}
    						
    	}
    
    	catch (Exception erro)
    	{
    		MessageBox.Show("Erro\n" + erro.Message, "Controle de Gastos");
    	}
    }
    
    
    public void incluirGasto(int codConta, string valor, DateTime? dataVcto, DateTime? dataPagto, int codSituacao )
    {
    	String DateVcto = "NULL";
    	String DatePagto = "NULL";
    	
    	if( dataVcto.HasValue )
    	{
    		DateVcto = "'" + dataVcto.ToString("yyyyMMdd") + "'";
    	}
    	
    	if( dataPagto.HasValue )
    	{
    		DatePagto = "'" + dataPagto.ToString("yyyyMMdd") + "'";
    	}
    	
    	comando.CommandText = "INSERT INTO despesa (codConta,valor,dataVcto,dataPagto, codSituacao)VALUES ('" + codConta + "', '" + valor + "'," + DateVcto + ", " + DatePagto + ", '" + codSituacao + "')";
    	comando.ExecuteNonQuery();
    }

    sexta-feira, 8 de fevereiro de 2013 12:30
  • O amigão, tudo bem?

    Mais uma vez obrigado

    Dilson

    sexta-feira, 8 de fevereiro de 2013 12:45
  • E ae rsrs

    estamos ae pra ajudar rs

    tenta ai e me fala =D

    Abraços.

    sexta-feira, 8 de fevereiro de 2013 12:47
  • Opa

    Infelizmente está dando o seguinte erro

    "String não retornou um datetime válido"

    Certo?

    Dilson

    sexta-feira, 8 de fevereiro de 2013 22:37
  • Acabei de descobrir o erro

    marquei em negrito e sublinhado abaixo

    private void btnGravar_Click(object sender, EventArgs e) { DateTime? DateVcto; // esta variável tem que declarar no início do código DateTime? DatePgto; // esta variável tem que declrara no inicio do codigo try { if (txtValor.Text !="" && mskVcto.Text !="" || mskPagto.Text!="") { if( IsDate( mskVcto.Text )) { DateVcto = DateTime.Parse( MskVcto.Text ); } if( IsDate( mskPagto.Text )) { DatePgto = DateTime.Parse( mskPagto.Text ); } conectaBanco(); consulta(); incluirGasto(int.Parse(cbDespesa.SelectedValue.ToString()), RetornaValorParaBD(Convert.ToDecimal(txtValor.Text)), DateVcto, DatePgto, int.Parse(cbSituacao.SelectedValue.ToString())); MessageBox.Show("Gasto incluído com Sucesso", "Controle de Gastos"); consulta(); txtValor.Clear(); mskVcto.Clear(); mskPagto.Clear(); } else { MessageBox.Show("Para incluir uma despesa é necessário no mínimo o Tipo, o Valor e o Vencimento da mesma!!! ", "Controle de Gastos"); } } catch (Exception erro) { MessageBox.Show("Erro\n" + erro.Message, "Controle de Gastos"); } } public void incluirGasto(int codConta, string valor, DateTime? dataVcto, DateTime? dataPagto, int codSituacao ) { String DateVcto = "NULL"; String DatePagto = "NULL"; if( dataVcto.HasValue ) { DateVcto = "'" + dataVcto.ToString("yyyyMMdd") + "'"; // sai fora

    } if( dataPagto.HasValue ) { DatePagto = "'" + dataPagto.ToString("yyyyMMdd") + "'"; // sai fora } comando.CommandText = "INSERT INTO despesa (codConta,valor,dataVcto,dataPagto, codSituacao)VALUES ('" + codConta + "', '" + valor + "'," + DateVcto + ", " + DatePagto + ", '" + codSituacao + "')"; comando.ExecuteNonQuery(); }

    • Marcado como Resposta DilsonDG sexta-feira, 8 de fevereiro de 2013 22:50
    sexta-feira, 8 de fevereiro de 2013 22:50
  • ah é só fazer 

    DateVcto = null;

    que já resolvia kkk

    desculpa pelo erro é que estava no serviço e acabei nem testando pelo compilador...

    sexta-feira, 8 de fevereiro de 2013 22:58